当实际需要global_variables_initializer()时
python
python-3.x
tensorflow
5
0
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是未初始化但用作算术运算的变量。

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

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)) 
收藏
评论

除非您在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...
收藏
评论

文档 (重点是我的):

调用tf.Variable()可在图表中添加几个操作:

  • 包含变量值的变量op。
  • 初始化程序op ,将变量设置为其初始值。这实际上是一个tf.assign操作。
  • 初始值的操作数,例如示例中biass变量的零值操作数,也添加到了图形中。

后来,

必须先显式运行变量初始化程序,然后才能运行模型中的其他操作 。最简单的方法是添加一个运行所有变量初始值设定项的操作,并在使用模型之前运行该操作。

简而言之,不再需要global_variables_initializerglobal_variables_initializer Variable初始化。只要代码中包含Variables ,就必须首先对其进行初始化。 global_variables_initializer帮助器将初始化所有先前声明的Variables ,因此这是一种非常方便的方法。

收藏
评论

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

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

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号