在Tensorflow中笆环,使用get_variable()
生成的變量是以指定的name屬性為唯一標識谴垫,并不是定義的變量名稱富弦。使用時一般通過name屬性定位到具體變量而线,并將其共享到其他模型中去锋华,實現(xiàn)變量共享嗡官。
Variable的用法
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
以上代碼定義了2次var1,可以看到在內(nèi)存中生成了兩個var1毯焕,因為他們的name屬性其實是不一樣的(雖然在定義的時候傳入的參數(shù)name都是一樣的)衍腥。對于圖來講后面的var1=2.0是生效的。
var2表明了:Variable如果在定義的時候沒有傳入name參數(shù)芥丧,系統(tǒng)會自動給加上一個名字紧阔。
get_variable()
get_var1 = tf.get_variable(name="firstvar",shape=[1],initializer=tf.constant_initializer(0.3))
print("get_var1:",get_var1.name)
get_var1 = tf.get_variable(name="firstvar",shape=[1],initializer=tf.constant_initializer(0.4))
print("get_var1:",get_var1.name)
輸出為:
get_var1: firstvar_2:0
程序在定義第二個get_var1的時候會報錯,原因在于使用get_variable定義變量只能定義一次指定名稱的變量续担。同時猶豫變量firstvar在前面使用Variable定義過一次擅耽,所以系統(tǒng)會將該變量自動變成firstvar_2:0。
如果將最后一段定義get_var1的地方改成:
get_var1 = tf.get_variable(name="firstvar_new",shape=[1],initializer=tf.constant_initializer(0.4))
print("get_var1:",get_var1.name)
用first_new去重新命名name物遇,就不會報錯了乖仇。
同樣的,新的get_var1值0.4會在圖的計算中生效询兴,而不是0.3乃沙。