tensorflow variable scope 变量命名空间和变量共享
2017-04-21 17:07
537 查看
import tensorflow as tf def f(): var = tf.Variable(initial_value=tf.random_normal(shape=[2])) return var a1=f() a2=f() with tf.Session() as sess: sess.run(tf.global_variables_initializer()) print(sess.run(a1)) print(sess.run(a2))
输出为:
[-0.74532765 -1.91889453] [ 0.35587442 0.8001433 ]
可以看到两次调用实际上是生成了两组变量。
在需要共享之前变量的时候可以使用get_variable()和 variable_scope() 来管理变量名和作用域。
def f1(): var = tf.get_variable(name="var_name",shape=[2],initializer=tf.random_normal_initializer()) return var a1=f1() a2=f1() with tf.Session() as sess: sess.run(tf.global_variables_initializer()) print(sess.run(a1)) print(sess.run(a2)) #ValueError: Variable var_name already exists, disallowed.
运行上面代码会抛出ValueError: Variable var_name already exists错误,这是因为get_variable()会检查是否有其他变量使用这个全称.在这里a1赋值的时候var_name已经被使用了。
使用variable_scope()可以解决这个问题:
方法1:
with tf.variable_scope('f_scope') as scope: a1=f1() scope.reuse_variables() a2=f1() with tf.Session() as sess: sess.run(tf.global_variables_initializer()) print(sess.run(a1)) print(sess.run(a2))
方法2:
with tf.variable_scope("f_scope1") : a1=f1() with tf.variable_scope("f_scope1", reuse = True): a2=f1() with tf.Session() as sess: sess.run(tf.global_variables_initializer()) print(sess.run(a1)) print(sess.run(a2))
输出为:
[ 1.16212559 -0.6709134 ] [ 1.16212559 -0.6709134 ]
可以看到两次调用使用同样的变量
要注意的是:variable_scope()的reuse 参数是不可继承。当打开一个重用变量作用域,那么所有的子作用域也将会被重用。
相关文章推荐
- tensorflow variable_scope共享变量
- tensorflow scope命名方法(variable_scope()与name_scope()解析)
- tensorflow的共享变量,tf.Variable(),tf.get_variable(),tf.Variable_scope(),tf.name_scope()联系与区别
- tensorflow的共享变量,tf.Variable(),tf.get_variable(),tf.Variable_scope(),tf.name_scope()联系与区别:
- TensorFlow 变量共享,命名空间
- tensorflow的共享变量,tf.Variable(),tf.get_variable(),tf.Variable_scope(),tf.name_scope()联系与区别
- tensorflow API简单整理(二、变量共享)
- Tensorflow lesson 3---变量Variable
- tensorflow里面共享变量、name_scope, variable_scope等如何理解
- What's the difference of name scope and a variable scope in tensorflow?
- tf 共享变量 tensorflow 里面 name_scope, variable_scope
- Effective TensorFlow Chapter 3: 理解变量域Scope和何时应该使用它
- Notes on tensorflow(六)variable_scope
- TF Boys (TensorFlow Boys ) 养成记(三): TensorFlow 变量共享
- tensorflow variable_scope,tf.name_scope, tf.variable, tf.get_varible
- tensorflow name_scope与variable_scope
- ValueError: Attempt to reuse RNNCell <tensorflow.contrib.rnn.python.ops.core_rnn_cell_impl.BasicLSTMCell object at 0x7f1a3c448390> with a different variable scope than its first use.解决方法
- tensorflow之变量作用域与变量共享(name_scope,variable_scope,get_variable,Variable)
- tensorflow variable_scope\name_scope
- 转载!tensorflow name scope和variable scope