tf.name_scope与tf.variable_scope

在看训练模型的代码的时候,发现自己很多不会的地方,所以就边学习边看,然后记录一些笔记,也方便自己以后的回顾。
在训练模型的时候,每输入一次图片就会创建一次过滤器对应的变量,但是为了方便,希望所有的图片都共享相同的变量,所以可以将这些变量设置为全局变量。但是存在的问题是打破封装性,这些变量必须文档化被其他代码文件引用,一旦代码变化,调用方也可能需要变化。还有一种保证封装性的方式是将模型封装成类。
首先要了解tensorflow当中创建变量的两种方式tf.get_variable()和tf.Variable()。

在tf.name_scope下:

tf.get_variable()创建的变量名不受tf.name_scope的影响,即创建的变量的name没有name_scope定义的前缀。而且,在未指定共享变量时,如果重名会报错。
tf.Variable()会自动检测有没有变量重名,如果有则会自行处理。

要共享变量,需要使用tf.variable_scope()

对于使用tf.Variable来说,tf.name_scope和tf.variable_scope功能一样,都是给变量加前缀,相当于分类管理,模块化。
对于tf.get_variable来说,tf.name_scope对其无效,也就是说tf认为当你使用tf.get_variable时,你只归属于tf.variable_scope来管理共享与否。

共享机制

tf.get_variable(, , ) 创建或返回给定名称的变量tf.variable_scope(<scope_name>) 管理传给get_variable()的变量名称的作用域

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值