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行和第4行。 7,我可以执行代码并查看值。如果我按原样运行,我会看到崩溃。
我的问题是它正在初始化哪些变量。 x
是一个不需要初始化的常量,y
是一个未被初始化但用作算术运算的变量。
答案 0 :(得分:15)
tf.global_variables_initializer
是初始化所有全局变量的快捷方式。它不是必需的,您可以使用其他方式初始化变量,或者在简单脚本的情况下,有时您根本不需要初始化它们。
除变量之外的所有内容都不需要初始化(常量和占位符)。但是应该初始化每个使用的变量(即使它是常量)。这会给你一个错误,虽然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))
答案 1 :(得分:4)
来自docs(强调我的):
调用tf.Variable()会向图表中添加几个操作:
- 包含变量值的变量op。
- 初始化程序操作,用于将变量设置为其初始值。这实际上是一个tf.assign op。
- 初始值的操作,例如示例中偏差变量的零操作也会添加到图表中。
后来,
必须在您的其他操作之前显式运行变量初始值设定项 模型可以运行。最简单的方法是添加一个运行的操作 所有变量初始值设定项,并在使用模型之前运行该操作。
简而言之,global_variables_initializer
永远不需要Variable
初始化。只要代码中有Variables
,就必须先将它们初始化。 global_variables_initializer
助手初始化之前声明过的所有Variables
,因此只是一种非常方便的方法。
答案 2 :(得分:2)
除非您在tensorflow会话运行中使用声明的tf.Variable
或tf.placeholder
,否则绝不是必需的。就个人而言,我总是养成tf.global_variables_initializer()
的习惯。当运行tensorflow模型时,它几乎成为锅炉板代码的一部分:
with tf.Session(graph=graph) as sess:
sess.run(tf.global_variables_initializer())
# run model etc...
答案 3 :(得分:2)
tf.global_variables_initializer
只是初始化tf.global_variables()
列出的所有变量。在分布式环境中,这实际上非常有意义,其中图可能位于集群中的不同计算节点中。
在这种情况下,tf.global_variables_initializer()
只是 tf.variables_initializer(tf.global_variables())
的别名,会初始化放置图表的所有计算节点中的所有变量。