当实际需要global_variables_initializer()时

时间:2017-06-01 06:06:16

标签: python python-3.x tensorflow initializer

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是一个未被初始化但用作算术运算的变量。

4 个答案:

答案 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.Variabletf.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()) 的别名,会初始化放置图表的所有计算节点中的所有变量。