tf.initialize_variables()不便 - FailedPreconditionError tensorflow

时间:2016-02-26 16:16:40

标签: python-2.7 tensorflow

我希望能够使用tf.initialize_variables()使用特定列表初始化tensorflow变量。所以,为了测试这个案例,我正在尝试这个,但它失败了:

sess.run(tf.initialize_variables(tf.all_variables()))

错误:

tensorflow.python.framework.errors.FailedPreconditionError: Attempting to use uninitialized value Layer_0/Initialize_Variables/weights

对我来说真的很奇怪,它是这样运作的:

sess.run(tf.initialize_variables([tf.all_variables()[0]]))
sess.run(tf.initialize_variables([tf.all_variables()[1]]))
sess.run(tf.initialize_variables([tf.all_variables()[2]]))
...

因此,如果我创建自己要初始化的变量列表,也会发生同样的情况。可能我误解了张量流机制的某些东西。有任何想法吗?如果我不必为每个变量使用循环,我会很高兴。

1 个答案:

答案 0 :(得分:2)

在没有看到代码的情况下很难分辨,但我的猜测是你正在从另一个变量初始化一个变量,这在TensorFlow中有点棘手。例如,我想你正在做这样的事情:

v_1 = tf.Variable(...)
v_2 = tf.Variable(v_1)

如果您尝试执行sess.run(tf.initalize_all_variables()),则会失败,因为它会尝试并行初始化v_1v_2,但v_2的初始化将失败(因为它输入目前未初始化。)

如果以递增顺序迭代tf.all_variables()列表,它将起作用,因为v_1被添加到v_2之前的列表中,因此顺序运行将导致{{1}在v_1之前初始化。 (猜测一下,如果你以反向顺序迭代v_2,它就会因类似错误而失败。)

修复有点微妙:每当您从另一个变量tf.all_variables()初始化变量v_2时,您应该使用v_1.initialized_value()作为v_1&#39的参数; s构造函数:

v_2

使用v_1 = tf.Variable(...) v_2 = tf.Variable(v_1.initialized_value()) 在两个初始值设定项之间添加控件依赖关系,以便v_1.initialized_valuev_1之前初始化,即使您尝试并行初始化它们。