不知何故,AdamOptimizer
无视tf.control_dependencies
。你知道吗
这是一个测试。我要求TensorFlow执行以下操作:
我使用tf.control_dependencies来“确保”TF在运行步骤2之后运行步骤3。你知道吗
如果TensorFlow按正确的顺序执行这3个步骤,则步骤1和步骤2的结果应该相同。你知道吗
但事实并非如此。怎么了?你知道吗
测试:
import numpy as np
import tensorflow as tf
x = tf.get_variable('x', initializer=np.array([1], dtype=np.float64))
loss = x * x
optim = tf.train.AdamOptimizer(1)
## Control Dependencies ##
with tf.control_dependencies([loss]):
train_op = optim.minimize(loss)
## Run ##
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init_op)
for i in range(1000):
a = sess.run([loss])
b = sess.run([loss, train_op])[0]
print(a, b)
assert np.allclose(a, b)
结果:
[array([1.])] [2.50003137e-14]
AssertionError
步骤1和步骤2的结果不一样。你知道吗
听起来您希望
sess.run([loss, adam_op])
运行loss
,然后运行adam_op
。唉,赛斯·润不是那样的。以这个简单的示例为例,它打印1.0 1.0
,表示set_x
操作在get_x
之前运行。你知道吗根据
tf.identity(loss)
进行步骤3可以神奇地解决问题。你知道吗怎么回事??你知道吗
魔法修复:
结果:
相关问题 更多 >
编程相关推荐