tf.initialize_variables() 不便 - FailedPreconditionError tensorflow
tf.initialize_variables() inconvenience - FailedPreconditionError 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]]))
...
因此,如果我创建自己要初始化的变量列表,也会发生同样的情况。可能我误解了一些张量流机制。有任何想法吗?如果我不必为每个变量使用循环来做到这一点,我会很高兴。
不看代码很难判断,但我的猜测是您正在从另一个变量初始化一个变量,这在 TensorFlow 中有点棘手。例如,我想你正在做这样的事情:
v_1 = tf.Variable(...)
v_2 = tf.Variable(v_1)
如果您尝试执行 sess.run(tf.initalize_all_variables())
这将失败,因为它将尝试并行初始化 v_1
和 v_2
,但是 v_2
的初始化将失败(因为它的输入当前未初始化)。
如果你以递增的顺序遍历 tf.all_variables()
列表,它将起作用,因为 v_1
在 v_2
之前被添加到列表中,所以 运行 事情顺序将导致 v_1
在 v_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_1
在 v_2
之前初始化,即使您尝试并行初始化它们也是如此。
我希望能够使用 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]]))
...
因此,如果我创建自己要初始化的变量列表,也会发生同样的情况。可能我误解了一些张量流机制。有任何想法吗?如果我不必为每个变量使用循环来做到这一点,我会很高兴。
不看代码很难判断,但我的猜测是您正在从另一个变量初始化一个变量,这在 TensorFlow 中有点棘手。例如,我想你正在做这样的事情:
v_1 = tf.Variable(...)
v_2 = tf.Variable(v_1)
如果您尝试执行 sess.run(tf.initalize_all_variables())
这将失败,因为它将尝试并行初始化 v_1
和 v_2
,但是 v_2
的初始化将失败(因为它的输入当前未初始化)。
如果你以递增的顺序遍历 tf.all_variables()
列表,它将起作用,因为 v_1
在 v_2
之前被添加到列表中,所以 运行 事情顺序将导致 v_1
在 v_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_1
在 v_2
之前初始化,即使您尝试并行初始化它们也是如此。