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/

10-15 08:51