scope 参数错误或没有 scope 权限_tf.name_scope() 命名域

Key points:

  • 命名空间的实际作用
  • 命名空间对变量作用域无影响
  • 命名空间多次重复执行时加1操作
  • 如何指定变量到相同的命名空间
  • namescope 对 get_variable 无影响

1,tf.name_scope()命名空间的实际作用

  • 在某个tf.name_scope()指定的区域中定义的所有对象及各种操作,他们的“name”属性上会增加该命名区的区域名,用以区别对象属于哪个区域
  • 将不同的对象及操作放在由tf.name_scope()指定的区域中,便于在tensorboard中展示清晰的逻辑关系图,这点在复杂关系图中特别重要。

0a43d916cad47c8f5c824c60d5ab068b.png

2,name_scope()只决定“对象”属于哪个范围,并不对“对象”的“作用域”产生任何影响。

在name_scope中定义的对象,从被定义的位置开始,直到后来某个地方对该对象重新定义,中间任何地方都可以使用该对象。本质上name_scope只对对象的name属性进行圈定,并不会对其作用域产生任何影响。比如你在某个城市出生,只能在这里活动,去别的地方就会挂掉,这是不会的!

示例如下:

变量 a 在case1 中定义,但是与case2 输出相同,case3 在不同的with中定义,结果与case1 and 2 相同。 Case4 重新的定义输出,结果与case5 相同。

b4f1f4745bf31024061f67aaf6cc6421.png

3. 相同命名空间的多次执行,序号变化

tf.name_scope('cgx_scope')语句重复执行几次,就会生成几个独立的命名空间,尽管表面上看起来都是“cgx_scope”,实际上tensorflow在每一次执行相同语句都会在后面加上“_序数”,加以区别。

见下例:

(1)指定了“cgx_scope”命名区域,并在其中定义变量a;

(2)又指定了相同名称的“cgx_scope”命名区域,并在其中定义变量b;

(3)输出a.name = cgx_scope/my_a:0和b.name = cgx_scope_1/my_b:0,可见b.name已经自动加了“_1”,这是tensorflow的特点,自动检测是否重复,有重复就自动增加数字作为标记。

e8d29f630b870fb72a850790134d1115.png

4. 如何在不同的地方将对象指定到相同的name_scope中?

方法:

with 

c8189cd74039a88dceb0b65b900607da.png

5. tf.name_scope()对由tf.get_variable()产生的变量没有影响

如下例:

在cgx_scope命名空间下,a是由tf.get_variable()生成的变量,b是由tf.Variable()生成的变量,按规律a.name和b.name的前缀都是cgx_scope,但从输出结果可看出,a.name的前缀没出现,说明a不在该命名空间。后面的tensorboard图也说明了这点。出现这种情况是由tf.get_variable()的特性决定的。

3b68a62f192f5d9c5346f792ec2b6b28.png

参考:

https://www.jianshu.com/p/635d95b34e14

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值