使用variable宣告變數,同名變數的name後會自動加_1,可以賦初始值,但是需要在session初始化後才會生效。
import tensorflow as tf
var1 = tf.variable(1.0,name='firstvar')
print("var1:",var1.name)
var1 = tf.variable(2.0,name='firstvar')
print("var1:",var1.name)
var2 = tf.variable(3.0)
print("var2:",var2.name)
var2 = tf.variable(4.0)
print("var2:",var2.name)
with tf.session() as sess:
sess.run(tf.global_variables_initializer())
print("var1=",var1.eval())
print("var2=",var2.eval())
執行結果:
var1: firstvar:0
var1: firstvar_1:0
var2: variable:0
var2: variable_1:0
var1= 2.0
var2= 4.0
使用get_variable()也可以建立變數,但是不能生成兩個name相同的變數(在同一scope中),
getvar1 = tf.get_variable("firstvar",[1],initializer=tf.constant_initializer(0.3))
print("getvar:",getvar1.name)
getvar1 = tf.get_variable("firstvar1",[1],initializer=tf.constant_initializer(0.4))
print("getvar:",getvar1.name)
宣告不同scope的變數:
with tf.variable_scope("t1"):
getvar1 = tf.get_variable("firstvar",[1],initializer=tf.constant_initializer(0.3))
print("getvar:",getvar1.name)
with tf.variable_scope("t2"):
getvar1 = tf.get_variable("firstvar",[1],initializer=tf.constant_initializer(0.4))
print("getvar:",getvar1.name)
getvar: t1/firstvar:0
getvar: t2/firstvar:0
使用作用域的reuse引數實現共享變數的功能,因為加了reuse所以這裡獲取的變數必須是已經建立過的,否則會報錯。
with tf.variable_scope("t1",reuse=true):
get1=getvar1 = tf.get_variable("firstvar", [1], initializer=tf.constant_initializer(0.3))
print(get1) # t1/firstvar:0
auto_reuse在第一呼叫這個作用域是傳入false,第二次為true;也就是說如果變數沒有被建立過,則會幫你建立,建立過的話就不建立。
with tf.variable_scope("t1",reuse=tf.auto_reuse):
get1 = tf.get_variable("firstvar", [1], initializer=tf.constant_initializer(0.3))
print(get1.name)
tf.name_scope()可以限制操作符的作用域,空字串可以把作用域擴大到頂層。
with tf.variable_scope("scope",reuse=tf.auto_reuse) as sp:
get1 = tf.get_variable("firstvar", [1], initializer=tf.constant_initializer(0.3))
print(get1.name)
with tf.name_scope("bar"):
v = tf.get_variable("v",[1])
x = 10+v
with tf.name_scope(""):
y = 10+v
with tf.variable_scope("scope2"):
var2 = tf.get_variable("v",[1])
with tf.variable_scope(sp) as sp1:
var3 = tf.get_variable("v3",[1])
with tf.variable_scope(""):
var4 = tf.get_variable("v4",[1])
print("var4:",var4.name)
print("y:",y.op.name)
tensorflow 共享變數
import tensorflow as tf 設定隨機種子,使得每次隨機初始化都一樣 tf.set random seed 1234 這是我們要共享的變數函式 def share variable input weight tf.get variable weight 2,2 return wei...
Tensorflow 變數的共享
tensorflow exp example sparse tensor classification train validate.py 當你需要train的過程中validate的時候,如果用placeholder來接收輸入資料 那麼乙個compute graph可以完成這個任務。如果你用的是t...
Tensorflow共享變數機制
我們定義變數通常使用tf.variable 的方式進行建立變數,但在某種情況下,乙個模型需要使用其他模型建立的變數,兩個模型一起訓練。比如 對抗網路中的生成器模型和判別器模型。如果使用variable進行建立,那麼得到的是乙個新的變數,而非原來的變數。這時就需引入共享變數解決問題。使用tf.vari...