我一直在努力了解如何在Tensorflow中初始化变量。下面,我创建了一个简单的示例,它在一些variable_scope
中定义了一个变量,并且该过程包含在子函数中。
根据我的理解,此代码会在'x'
'test_scope'
阶段内创建变量tf.initialize_all_variables()
,之后可以使用tf.get_variable()
始终访问该变量Attempting to use uninitialized value
。但是,此代码最后在print(x.eval())
行显示import tensorflow as tf
def create_var_and_prod_with(y):
with tf.variable_scope('test_scope'):
x = tf.Variable(0.0, name='x', trainable=False)
return x * y
s = tf.InteractiveSession()
y = tf.Variable(1.0, name='x', trainable=False)
create_var_and_prod_with(y)
s.run(tf.initialize_all_variables())
with tf.variable_scope('test_scope'):
x = tf.get_variable('x', [1], initializer=tf.constant_initializer(0.0), trainable=False)
print(x.eval())
print(y.eval())
错误。
我对Tensorflow如何初始化变量一无所知。我能得到任何帮助吗?谢谢。
repositories {
jcenter()
}
答案 0 :(得分:0)
如果要重用变量,则必须使用get_variables
声明它,并明确要求范围使变量可重用。
如果更改了行
x = tf.Variable(0.0, name='x', trainable=False)
使用:
x = tf.get_variable('x', [1], trainable=False)
您要求范围使已定义的变量可用:
with tf.variable_scope('test_scope') as scope:
scope.reuse_variables()
x = tf.get_variable('x', [1], initializer=tf.constant_initializer(0.0), trainable=False)
然后您可以毫无问题地运行print(x.eval(), y.eval())
。
答案 1 :(得分:0)
如果要将变量重用为tf.get_variable('x')
,则必须首先使用tf.get_variable('x').
reuse = True`创建变量。
Moreover, when you want to retrieve a created variable, you need to be in a scope with
以下是您的代码应该是什么样的:
import tensorflow as tf
def create_var_and_prod_with(y):
with tf.variable_scope('test_scope'):
x = tf.get_variable('x', [1], initializer=tf.constant_initializer(0.0), trainable=False)
return x * y
y = tf.Variable(1.0, name='x', trainable=False)
create_var_and_prod_with(y)
with tf.variable_scope('test_scope', reuse=True):
x = tf.get_variable('x') # you only need the name to retrieve x
# Try to put the session only at the end when it is needed
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
print(x.eval())
print(y.eval())
您可以在this tutorial中了解更多相关信息。