2017-06-01 49 views
2
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'是未被初始化的变量,但用作算术运算。当实际需要global_variables_initializer()时

回答

2

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)) 
+0

在我的代码中,没有像“z = tf.Variable(4)”这样的变量的“显式初始化”。但是我使用了变量y,它是算术运算的输出,它正在通过sess.run()进行评估。在这种情况下,它需要“隐式初始化”,因此我们需要变量初始化? – Vinay

+0

@Vinay“没有明确的初始化”是什么意思?如果不是初始化,这是什么? 'tf.Variable(x + 5,name ='y')' –

+0

谢谢,你说得对。我把这个陈述当作算术运算而不是初始化。 – Vinay

1

docs(重点煤矿):

调用tf.Variable()增加了几个OPS到图形:

  • 保持该变量值的变量的运算。
  • 初始化程序op将变量设置为其初始值。这实际上是一个tf.assign操作。
  • 初始值的操作,例如示例中的偏差变量的零操作也被添加到图中。

后来,

变量初始化必须明确其他OPS前将 模式下运行,可以运行。最简单的方法是添加一个运行 所有变量初始值设定项的操作,并在使用该模型之前运行该操作。

总之,global_variables_initializer从不需要,Variable初始化是。只要你的代码中有Variables,你就必须首先初始化它们。 global_variables_initializer帮助程序初始化之前已经声明的所有Variables,因此只是一个非常方便的方法。

1

这是从来没有要求,除非你使用的是声明tf.Variabletf.placeholder从tensorflow会话内运行。就我个人而言,我总是习惯于运行tf.global_variables_initializer()。它运行tensorflow模型的时候,几乎成为锅炉板代码的一部分:

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

    # run model etc... 
1

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

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

相关问题