Python tf.global_variables_initializer()在引擎盖下做什么?
TensorFlow用户添加Python tf.global_variables_initializer()在引擎盖下做什么?,python,tensorflow,Python,Tensorflow,TensorFlow用户添加 init_op=tf.global_variables_initializer() 在定义任何变量或操作,然后根据 Attempting to use uninitialized value 有一种解释,但它没有提到底层的tf.global\u variables\u初始值设定项调用。它几乎是大规模复制。这个问题的重点是,当一些用户调用sess.run(init_op)时,仍然存在未初始化的值。示例代码和对什么tf.global\u variables\u in
init_op=tf.global_variables_initializer()
在定义任何变量或操作,然后根据
Attempting to use uninitialized value
有一种解释,但它没有提到底层的
tf.global\u variables\u初始值设定项调用。它几乎是大规模复制。这个问题的重点是,当一些用户调用sess.run(init_op)
时,仍然存在未初始化的值。示例代码和对什么tf.global\u variables\u initializer
的分析将非常有用。TensorFlow API有一个非常简短的部分。它只提到:
这只是变量\初始值设定项(全局变量())
的快捷方式
追溯到,我们可以看到该函数的用法如下:
tf.variables\u初始值设定项(var\u list,name='init')
这意味着我们将tf.global\u variables
作为var\u列表
简单地传递到tf.variables\u初始值设定项
。如果我们在调用tf.global\u variables\u初始值设定项之前没有定义任何变量,var\u list
基本上是空的。下面的代码说明了这一点:
将tensorflow导入为tf
使用tf.Graph()作为默认值():
#什么也没印
对于tf.global_变量()中的v:
印刷品
init_op=tf.global_variables_initializer()
a=tf.变量(0)
b=tf.变量(0)
c=tf.变量(0)
#这里打印了3个变量
对于tf.global_变量()中的v:
印刷品
使用tf.Session()作为sess:
sess.run(初始化操作)
打印sess.run(a)
打印出的3个变量如下:
<tf.Variable 'Variable:0' shape=() dtype=int32_ref>
<tf.Variable 'Variable_1:0' shape=() dtype=int32_ref>
<tf.Variable 'Variable_2:0' shape=() dtype=int32_ref>
将init_op
的位置切换到a b c
之后:
a=tf.变量(0)
b=tf.变量(0)
c=tf.变量(0)
init_op=tf.global_variables_initializer()
将使它工作。该文件实际上有一个非常详细和有用的。你特别了解到
在运行模型中的其他操作之前,必须显式运行变量初始值设定项。最简单的方法是添加一个运行所有变量初始值设定项的op,并在使用模型之前运行该op。(..)使用tf.global_variables_initializer()
添加一个op以运行变量初始化器
所以基本上tf.global\u variables\u initializer()
检查所有变量,并调用
sess.run(my_var.initializer)
tf.global\u variables\u initializer()
立即自动执行此操作。此函数可以节省时间,但从技术上讲,您不必调用它,并且可以通过其他方式初始化变量(最常见的示例:从文件恢复权重)
它如何了解所有变量?默认情况下,创建变量
时,会将其添加到tensorflow的全局变量
集合中。因此,global\u variables\u initializer
基本上是迭代这个集合的变量并调用它们的initializer
但是,Variable
允许您选择要将其放入的集合。如果从GLOBAL\u VARIABLES
中排除变量,则创建的变量将不会由tf\u GLOBAL\u VARIABLES\u初始值设定项()初始化:
将tensorflow导入为tf
x=tf.变量(0)
my_vars=[]
y=tf.Variable(0,collections=my_vars)
sess=tf.InteractiveSession()
tf.global_variables_initializer().run()#不初始化y!
打印(x.eval())
# 0
打印(y.eval())
#FailedPremissionError:尝试使用未初始化的值变量_2
此问题可能重复的内容与您链接的内容不同。添加了上面这个问题的焦点。我正在使用tf 1.15和tf。变量\初始值设定项不再可用。相反,tf.global\u variables\u initializer()
等于tf.initialize\u variables(var\u list=tf.global\u variables())
sess.run(my_var.initializer)