1.tensorflow变量名字
tensorflow提供了通过变量名称来创建或者获取一个变量的机制。可以通过变量的名字来使用变量,同时也能通过判断变量名称知道变量是否重复。当reuse为False或者None时(这也是默认值),同一个tf.variable_scope下面的变量名不能相同;当reuse为True时,tf.variable_scope只能获取已经创建过的变量。
reuse=False时会报错的情况:
with tf.variable_scope('foo'):
v = tf.get_variable('v',[1],initializer=tf.constant_initializer(1.0))
with tf.variable_scope('foo'):
v1 = tf.get_variable('v',[1])
这种情况下,v和v1的名字都是foo/v,会有命名冲突。第二段改成:
with tf.variable_scope('foo', reuse=True)
tf.get_variable()就是获取v变量的功能而不是创建。
with tf.variable_scope('bar', reuse=True):
v3 = tf.get_variable('v',[1])
如果是这样,也会报错,因为reuse为真时tf.get_variable()获取变量,但bar/v并没有定义过。
2.tf.Variable与tf.get_variable
变量可以通过tf.Varivale与tf.get_variable来创建。当tf.get_variable用于变量创建时,和tf.Variable的功能基本等价
#以下两个定义是等价的
v = tf.get_variable('v', shape=[1], initializer=tf.constant_initializer(1.0))
v = tf.Variable(tf.constant(1.0, shape=[1], name='v')
tf.get_varialbe和tf.Variable最大的区别在于:tf.Variable的变量名是一个可选项,通过name=’v’的形式给出。但是tf.get_variable必须指定变量名。
3.tf.variable_scope与tf.name_scope
这两个管理命名空间的函数功能差不多,只在使用tf.get_varialbe时有差异。tf.get_variable函数不受tf.name_scope的影响。
with tf.variable_scope('foo'):
a = tf.get_variable('bar',[1])
print(a.name)#结果为foo/bar:0
with tf.name_scope('a'):
a=tf.Variable([1])
print(a.name)#结果为a/Variable:0
b=tf.get_variable('b',[1])
print(b.name)#结果为b:0