TensorFlow變數管理
一、TensorFlow變數管理
1. TensorFLow還提供了tf.get_variable函式來建立或者獲取變數,tf.variable用於建立變數時,其功能和tf.Variable基本是等價的。tf.get_variable中的初始化方法(initializer)的引數和tf.Variable的初始化過程也類似,initializer函式和tf.Variable的初始化方法是一一對應的,詳見下表。
tf.get_variable和tf.Variable最大的區別就在於指定變數名稱的引數。對於tf.Variable函式,變數名稱是一個可選的引數,通過name=”v”的形式給出,對於tf.get_variable函式,變數名稱是一個必填的引數,tf.get_variable會根據這個名稱去建立或者獲取變數。
2. 通過tf.variable_scope函式可以控制tf.get_variable函式的語義。當tf.variable_scope函式的引數reuse=True生成上下文管理器時,該上下文管理器內的所有的tf.get_variable函式會直接獲取已經建立的變數,如果變數不存在則報錯;當tf.variable_scope函式的引數reuse=False或者None時建立的上下文管理器中,tf.get_variable函式則直接建立新的變數,若同名的變數已經存在則報錯。
3. 另tf.variable_scope函式是可以巢狀使用的。巢狀的時候,若某層上下文管理器未宣告reuse引數,則該層上下文管理器的reuse引數與其外層保持一致。
4.tf.variable_scope函式提供了一個管理變數名稱空間的方式。在tf.variable_scope中建立的變數,名稱.name中名稱前面會加入名稱空間的名稱,並通過“/”來分隔名稱空間的名稱和變數的名稱。tf.get_variable("foou/baru/u", [1]),可以通過帶名稱空間名稱的變數名來獲取其名稱空間下的變數。
二、TensorFlow程式設計演示
import tensorflow as tf
# 在名字為foo的名稱空間內建立名字為v的變數
with tf.variable_scope("foo"):
v = tf.get_variable("v", [1], initializer=tf.constant_initializer(1.0))
'''
# 因為名稱空間foo內已經存在變數v,再次建立則報錯
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只能獲取指定名稱空間內的已建立的變數
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
相關文章
- Tensorflow學習筆記: 變數及共享變數筆記變數
- TensorFlow入門 - 變數(Variables)變數
- TensorFlow——共享變數的使用方法變數
- [原始碼解析] TensorFlow 之 分散式變數原始碼分散式變數
- TensorFlow學習(二):變數常量型別變數型別
- TensorFlow筆記(2) 常量與變數【僅供自學】筆記變數
- 【Tensorflow_DL_Note4】Tensorflow中的常量、變數和資料型別的結構變數資料型別
- TensorFlow常量、變數和佔位符詳解(學習筆記)變數筆記
- 【學生資訊管理系統】物件變數或者With塊變數未設定物件變數
- C語言裡全域性變數管理C語言變數
- 十二、變數作用域:區域性變數、全域性變數,函式版名片管理系統—新增函式文件變數函式
- 如何管理你的 Linux 環境變數Linux變數
- Tensorflow的幾種變數生成格式。tf.zero,tf.fill,tf.random變數random
- 成員變數、全域性變數、例項變數、類變數、靜態變數和區域性變數的區別變數
- 變數的分類(臨時(本地)變數、環境變數、全域性變數和系統變數)變數
- DB2環境變數管理方法集TODB2變數
- iOS 靜變數static、全域性變數extern、區域性變數、例項變數iOS變數
- 【譯】Effective TensorFlow Chapter12——TensorFlow中的數值穩定性APT
- 變數變數
- 【TensorFlow篇】--Tensorflow框架實現SoftMax模型識別手寫數字集框架模型
- Oracle中的替換變數,&變數名,&&變數名說明Oracle變數
- linux基礎——shell變數(本地變數和環境變數)Linux變數
- python變數與變數作用域Python變數
- ODI第7節-變數(一):變數變數
- Ansible fact變數與魔法變數變數
- 4.2.10 在Oracle重啟配置中管理環境變數Oracle變數
- maven用變數的方法統一管理jar包版本Maven變數JAR
- iOS全域性變數與屬性的記憶體管理iOS變數記憶體
- TensorFlow 團隊如何管理開源專案
- 引數和變數變數
- 全域性變數與區域性變數變數
- 靜態變數和非靜態變數變數
- ODI第10節-變數(四):變數使用變數
- 成員變數和區域性變數變數
- 區域性變數和全域性變數變數
- C語言區域性變數、全域性變數、靜態區域性變數、靜態全域性變數C語言變數
- 二、變數變數
- 變數提升變數