TensorFlow用户添加
init_op = tf.global_variables_initializer()
在定义任何变量或操作之前,然后沿着
Attempting to use uninitialized value
有一个解释here但是它没有提到底层的
tf.global_variables_initializer
调用。它几乎是在大规模复制tf api。这个问题的重点是,当一些用户调用sess.run(init_op)
时,仍然存在未初始化的值。示例代码和对tf.global_variables_initializer
的分析将是很好的。 最佳答案
TensorFlow API在tf.global_variables_initializer
上有一个非常短的部分。它简单地提到:
这只是variable_initializer(global_variables())
的快捷方式。
跟踪到tf.variables_initializer
,我们可以看到此函数的用法如下:tf.variables_initializer(var_list, name='init')
这意味着我们只是简单地将tf.global_variables
作为var_list
传递到tf.variables_initializer
中。如果在调用tf.global_variables_initializer
之前没有定义任何变量,var_list
基本上是空的。下面的代码说明了这一点:
import tensorflow as tf
with tf.Graph().as_default():
# Nothing is printed
for v in tf.global_variables():
print v
init_op = tf.global_variables_initializer()
a = tf.Variable(0)
b = tf.Variable(0)
c = tf.Variable(0)
# 3 Variables are printed here
for v in tf.global_variables():
print v
with tf.Session() as sess:
sess.run(init_op)
print sess.run(a)
打印出的3个变量如下:
<tf.Variable 'Variable:0' shape=() dtype=int32_ref>
<tf.Variable 'Variable_1:0' shape=() dtype=int32_ref>
<tf.Variable 'Variable_2:0' shape=() dtype=int32_ref>
按原样运行上述代码将导致沿上述行的错误:
Attempting to use uninitialized value
将
init_op
的位置切换到a b c
之后: a = tf.Variable(0)
b = tf.Variable(0)
c = tf.Variable(0)
init_op = tf.global_variables_initializer()
会起作用的。
关于python - tf.global_variables_initializer()在幕后做了什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45047929/