TensorFlow中的name_scope和variable_scope

1、tf.Variable() 和 tf.get_variable()

     (1)tf.Variable()会自动检测命名冲突并自行处理。

import tensorflow as tf
sess = tf.Session()
var1 = tf.Variable([1.2, 3.4], name = 'var')
var2 = tf.Variable([2.2, 5.5], name = 'var')
sess.run(tf.global_variables_initializer())
print(var1.name, sess.run(var1))
print(var2.name, sess.run(var2))

### 运行结果:
var:0 [1.2 3.4]
var_1:0 [2.2 5.5]  ## 变量名自动变为var_1,避免与var冲突

      (2)tf.get_variable()有一个变量检测机制,会检测已经存在的变量是否设置为共享变量,如果已经存在该变量且没有被设置为共享变量,则TensorFlow运行到第二个变量时会报错。 设置为共享变量的值相等。

1、未设置为共享变量:
import tensorflow as tf
sess = tf.Session()
var1 = tf.get_variable(name = 'get_var', shape = [2,3])
var2 = tf.get_variable(name = 'get_var', shape = [2,3])
sess.run(tf.global_variables_initializer())
print(var1.name, sess.run(var1))
print(var2.name, sess.run(var2))

## 运行结果:
ValueError: Variable get_var already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope? Originally defined at:

  File "<ipython-input-1-b4ded7fba4ad>", line 3, in <module>

2、设置为共享变量,值相等:
import tensorflow as tf
sess = tf.Session()
with tf.variable_scope('var_scope') as scope:
    scope.reuse_variables()  ## 变量共享机制,该段代码和在tf.variable_scope函数中加入reuse = True的作用相同。
    var1 = tf.get_variable(name = 'var', shape = [2,1], dtype = tf.float32)
    var2 = tf.get_variable(name = 'var')
    
sess.run(tf.global_variables_initializer())
print(var1.name, sess.run(var1))
print(var2.name, sess.run(var2))

## var1和var2的变量名相同,值也相同。运行结果:
var_scope/var:0 [[ 0.2602787 ]
 [-0.01280653]]
var_scope/var:0 [[ 0.2602787 ]  
 [-0.01280653]]  

2、tf.name_scope()与tf.variable_scope()

  (1) tf.name_scope()创建一个graph,作用相当于一个以name参数命名的文件夹,主要用于管理一个graph里的各种operation。每一个graph下面可以定义各种operation或者subgraph,实现一种层次化有条理的管理,避免各个op之间命名冲突。

(2)tf.variable_scope()一般与tf.name_scope()配合使用,用于管理一个graph中变量的名字,避免变量之间的命名冲突,tf.variable_scope()允许在一个variable_scope下面共享变量。variable_scope的reuse的默认值为False。见上面的例子。


  (3) 通常情况下,tf.variable_scope和tf.name_scope配合,能画出非常漂亮的流程图,但是他们两个之间又有着细微的差别,那就是name_scope只能管住操作ops的名字,而管不住变量Variables的名字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值