当实际需要 global_variables_initializer() 时

When global_variables_initializer() is actually required

import tensorflow as tf
x = tf.constant(35, name='x')
y = tf.Variable(x + 5, name='y')
# model = tf.global_variables_initializer()
with tf.Session() as session:
        print("x = ", session.run(x)) 
        # session.run(model)
        print("y = ", session.run(y))

我无法理解什么时候真正需要 global_variables_initializer()。在上面的代码中,如果我们取消注释第 4 行和第 7 行,我可以执行代码并查看值。如果我按原样 运行,我会看到崩溃。

我的问题是它正在初始化哪些变量。 x是一个不需要初始化的常量,y是一个不被初始化但用作算术运算的变量。

来自 docs(强调我的):

Calling tf.Variable() adds several ops to the graph:

  • A variable op that holds the variable value.
  • An initializer op that sets the variable to its initial value. This is actually a tf.assign op.
  • The ops for the initial value, such as the zeros op for the biases variable in the example are also added to the graph.

稍后,

Variable initializers must be run explicitly before other ops in your model can be run. The easiest way to do that is to add an op that runs all the variable initializers, and run that op before using the model.

简而言之,永远不需要 global_variables_initializer,需要 Variable 初始化。每当你的代码中有 Variables 时,你必须先初始化它们。 global_variables_initializer 帮助程序初始化所有之前声明的 Variables,因此这是一种非常方便的方法。

tf.global_variables_initializer是初始化所有全局变量的快捷方式。这不是必需的,您可以使用其他方式来初始化您的变量,或者在简单脚本的情况下,有时您根本不需要初始化它们。

除了变量之外的所有东西都不需要初始化(常量和占位符)。但是每个 used 变量(即使它是一个常量)都应该被初始化。这会给你一个错误,尽管 z 只是只有一个数字的 0-d 张量。

import tensorflow as tf
z = tf.Variable(4)
with tf.Session() as session:
        print(session.run(z)) 

我突出显示了使用的词,因为如果你只有不是 运行 的变量(或者 运行 中的任何一个都取决于它们)你不需要初始化它们。


例如,这段代码将毫无问题地执行,尽管如此,它有 2 个变量和一个依赖于它们的操作。但是 运行 不需要它们。

import tensorflow as tf
x = tf.constant(35, name='x')
y = tf.Variable(x + 5, name='y')
z = tf.Variable(4)
a = y + z
with tf.Session() as session:
        print("x = ", session.run(x)) 

除非您在 tensorflow 会话 运行 中使用已声明的 tf.Variabletf.placeholder,否则这绝不是必需的。就个人而言,我总是养成运行宁tf.global_variables_initializer()的习惯。当 运行ning tensorflow 模型时,它几乎成为样板代码的一部分:

with tf.Session(graph=graph) as sess:
    sess.run(tf.global_variables_initializer())

    # run model etc...

tf.global_variables_initializer 只是初始化 tf.global_variables() 列出的所有变量。这在图形可能位于集群中不同计算节点的分布式环境中实际上很有意义。

在这种情况下,tf.global_variables_initializer()只是tf.variables_initializer(tf.global_variables())的别名,将初始化所有计算节点中的所有变量,其中图被放置。