我编写了一个samll程序来测试if (empty($_POST['firstname'])) {
的工作方式,但是结果似乎让我感到困惑。我的测试代码如下:
tf.control_dependencies
当我运行程序时,import tensorflow as tf
x = tf.Variable(0.0)
y = None
for i in range(5):
assign_op = tf.assign(x, i)
with tf.control_dependencies([assign_op]):
y = tf.identity(x)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(x))
print(sess.run(y))
和x
的值分别为y
和0.0
。由于4.0
的值可获得正确答案,因此在此示例中,y
中的assign_op
有效。然后,当op正常工作时,为什么tf.control_dependencies
的值不等于x
?
如果我对4.0
的实际运作方式有误解,请纠正我。
答案 0 :(得分:1)
因为直到运行y
为止,都没有分配。
您必须将程序视为计算图。通过设置依赖关系,您可以告诉Tensorflow“当您评估y时,请确保分配已经执行”。
但是您在第一次运行x
时会告诉您任何操作。
尝试在sess.run(x)
之后运行sess.run(y)
,您会看到预期的结果。
在图像中,您必须将水平线视为类似于“ join”控制操作:在评估节点之前等待所有“ below”操作”。
答案 1 :(得分:1)
这是因为您尚未执行assign_op
操作。这就是您想要的:
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
sess.run(assign_op)
print(sess.run(x))
print(sess.run(y))
# 4.0
# 4.0
但是您要先调用sess.run(x)
,然后它将其评估为初始值0.0
。如果您首先调用sess.run(y)
,它将首先执行x
的赋值,然后将y
评估为与x
相同的值:
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(y))
print(sess.run(x))
# 4.0
# 4.0
因此,您需要先致电sess.run(y)
。