【问题标题】:tf.initialize_variables() inconvenience - FailedPreconditionError tensorflowtf.initialize_variables() 不便 - FailedPreconditionError tensorflow
【发布时间】:2016-02-26 16:16:39
【问题描述】:

我希望能够使用 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]]))
...

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

【问题讨论】:

  • 这看起来很奇怪/出乎意料,你有一个独立的例子来显示这个错误吗?

标签: python-2.7 tensorflow


【解决方案1】:

不看代码很难判断,但我猜你是从另一个变量初始化一个变量,这在 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_1v_2之前添加到列表中,所以顺序运行会导致v_1v_2之前被初始化. (猜测一下,如果您以 reverse 顺序迭代 tf.all_variables(),它会失败并出现类似的错误。)

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

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

使用v_1.initialized_value在两个初始化器之间添加一个控制依赖,这样v_1v_2之前初始化,即使你尝试并行初始化它们。

【讨论】:

  • 很好的猜测。我正要发布一个独立的例子,但你先来了。实际上我正在使用另一个值的 tf.identity() 来初始化一个新值,并且我没有怀疑依赖问题(即使我经历了 Variable.initialized_value() 上的“有点不清楚”的解释文档几次)。谢谢!
猜你喜欢
  • 2020-08-05
  • 1970-01-01
  • 2018-10-25
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 2021-07-18
相关资源
最近更新 更多