TensorFlow變量管理詳解
一、TensorFlow變量管理
1. TensorFLow還提供了tf.get_variable函數來創(chuàng)建或者獲取變量,tf.variable用于創(chuàng)建變量時,其功能和tf.Variable基本是等價的。tf.get_variable中的初始化方法(initializer)的參數和tf.Variable的初始化過程也類似,initializer函數和tf.Variable的初始化方法是一一對應的,詳見下表。

tf.get_variable和tf.Variable最大的區(qū)別就在于指定變量名稱的參數。對于tf.Variable函數,變量名稱是一個可選的參數,通過name=”v”的形式給出,對于tf.get_variable函數,變量名稱是一個必填的參數,tf.get_variable會根據這個名稱去創(chuàng)建或者獲取變量。
2. 通過tf.variable_scope函數可以控制tf.get_variable函數的語義。當tf.variable_scope函數的參數reuse=True生成上下文管理器時,該上下文管理器內的所有的tf.get_variable函數會直接獲取已經創(chuàng)建的變量,如果變量不存在則報錯;當tf.variable_scope函數的參數reuse=False或者None時創(chuàng)建的上下文管理器中,tf.get_variable函數則直接創(chuàng)建新的變量,若同名的變量已經存在則報錯。
3. 另tf.variable_scope函數是可以嵌套使用的。嵌套的時候,若某層上下文管理器未聲明reuse參數,則該層上下文管理器的reuse參數與其外層保持一致。
4.tf.variable_scope函數提供了一個管理變量命名空間的方式。在tf.variable_scope中創(chuàng)建的變量,名稱.name中名稱前面會加入命名空間的名稱,并通過“/”來分隔命名空間的名稱和變量的名稱。tf.get_variable("foou/baru/u", [1]),可以通過帶命名空間名稱的變量名來獲取其命名空間下的變量。
二、TensorFlow編程演示
import tensorflow as tf
# 在名字為foo的命名空間內創(chuàng)建名字為v的變量
with tf.variable_scope("foo"):
v = tf.get_variable("v", [1], initializer=tf.constant_initializer(1.0))
'''''
# 因為命名空間foo內已經存在變量v,再次創(chuàng)建則報錯
with tf.variable_scope("foo"):
v = tf.get_variable("v", [1])
# ValueError: Variable foo/v already exists, disallowed.
# Did you mean to set reuse=True in VarScope?
'''
# 將參數reuse參數設置為True,則tf.get_variable可直接獲取已聲明的變量
with tf.variable_scope("foo", reuse=True):
v1 = tf.get_variable("v", [1])
print(v == v1) # True
'''''
# 當reuse=True時,tf.get_variable只能獲取指定命名空間內的已創(chuàng)建的變量
with tf.variable_scope("bar", reuse=True):
v2 = tf.get_variable("v", [1])
# ValueError: Variable bar/v does not exist, or was not created with
# tf.get_variable(). Did you mean to set reuse=None in VarScope?
'''
with tf.variable_scope("root"):
# 通過tf.get_variable_scope().reuse函數獲取當前上下文管理器內的reuse參數取值
print(tf.get_variable_scope().reuse) # False
with tf.variable_scope("foo1", reuse=True):
print(tf.get_variable_scope().reuse) # True
with tf.variable_scope("bar1"):
# 嵌套在上下文管理器foo1內的bar1內未指定reuse參數,則保持與外層一致
print(tf.get_variable_scope().reuse) # True
print(tf.get_variable_scope().reuse) # False
# tf.variable_scope函數提供了一個管理變量命名空間的方式
u1 = tf.get_variable("u", [1])
print(u1.name) # u:0
with tf.variable_scope("foou"):
u2 = tf.get_variable("u", [1])
print(u2.name) # foou/u:0
with tf.variable_scope("foou"):
with tf.variable_scope("baru"):
u3 = tf.get_variable("u", [1])
print(u3.name) # foou/baru/u:0
u4 = tf.get_variable("u1", [1])
print(u4.name) # foou/u1:0
# 可直接通過帶命名空間名稱的變量名來獲取其命名空間下的變量
with tf.variable_scope("", reuse=True):
u5 = tf.get_variable("foou/baru/u", [1])
print(u5.name) # foou/baru/u:0
print(u5 == u3) # True
u6 = tf.get_variable("foou/u1", [1])
print(u6.name) # foou/u1:0
print(u6 == u4) # True
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
在python3環(huán)境下的Django中使用MySQL數據庫的實例
下面小編就為大家?guī)硪黄趐ython3環(huán)境下的Django中使用MySQL數據庫的實例。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08
tkinter高級布局之PanedWindow和notebook詳解
本文主要介紹了tkinter中的兩種布局控件,分別是可以動態(tài)劃分子控件的PanedWindow,和提供了選項卡工具的notebook,感興趣的小伙伴可以學習一下2023-08-08
Python實現PowerPoint演示文稿到圖片的批量轉換
PowerPoint演示文稿作為展示創(chuàng)意、分享知識和表達觀點的重要工具,被廣泛應用于教育、商務匯報及個人項目展示等領域,用Python代碼可以高效地實現PowerPoint演示文稿到圖片的批量轉換,從而提升工作效率,文本將介紹如何使用Python實現PowerPoint演示文稿到圖片的轉換2024-06-06

