tf.Variable和tf.get_Variable的区别

在Tensorflow中,使用get_variable()生成的变量是以指定的name属性为唯一标识,并不是定义的变量名称。使用时一般通过name属性定位到具体变量,并将其共享到其他模型中去,实现变量共享。

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,可以看到在内存中生成了两个var1,因为他们的name属性其实是不一样的(虽然在定义的时候传入的参数name都是一样的)。对于图来讲后面的var1=2.0是生效的。

var2表明了:Variable如果在定义的时候没有传入name参数,系统会自动给加上一个名字。

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定义过一次,所以系统会将该变量自动变成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。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容