TENSorflow中variable_scope中的变量初始化

时间:2016-06-06 15:18:54

标签: tensorflow

我一直在努力了解如何在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()
}

2 个答案:

答案 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').
Moreover, when you want to retrieve a created variable, you need to be in a scope with
reuse = True`创建变量。

以下是您的代码应该是什么样的:

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中了解更多相关信息。