tensorflow变量命名相关以及tf.variable_scope和tf.name_scope

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
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值