我是tensorflow的新手,我一直对图的构造和执行感到困惑。像在此简单代码中一样,temp = temp * 3中的=是什么意思?我以为它将在temp和temp本身之间建立连接,因此如果我调用sess.run(temp),它将是一个无限循环。但是结果似乎没有。
第二,在第一次打印后,我认为temp已经改变了它的价目表,所以我第二次调用它时,它不应该是3.0。那么,如果我调用sess.run(),执行规则是什么?
temp = tf.Variable(1.0)
temp = temp*3
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(temp))
print(sess.run(temp))
输出是:
3.0
3.0
用tf.assign()替换=后,我不了解其中的区别
temp = tf.Variable(1.0)
temp = tf.assign(temp, temp*3)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(temp))
print(sess.run(temp))
输出为:
3.0
9.0
答案 0 :(得分:0)
"="
是赋值运算符,在temp = temp*3
中,您将temp*3
返回的张量分配给temp
。
无论何时创建张量,tensorflow都会在会话图中存储该张量。您的变量temp是该图中的一个节点。
在此示例中,您的图形应如下所示:
变量(1)->标量乘法(3)
您的temp
显示标量乘法张量。
每次调用sess.run(temp)
时,都会从头开始运行图形,该图形将计算一个值为1的变量张量并将其乘以3。
如果您希望在第二次打印时输出9,请使用tf.Variable
而不是tf.placeholder
并将第一次运行的结果作为运行调用的feed_dict参数传递。
https://www.tensorflow.org/api_docs/python/tf/placeholder
编辑:回答评论
与'='运算符tf.assign
不同,它向会话图添加了一个节点。
让我们摆脱温度,给变量命名并绘制图形
a = tf.Variable(1.0)
b = tf.assign(b, a*3)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(b))
print(sess.run(b))
变量(1)-> scaler_multiplication(3)->赋值(b)
执行此图两次将给我们3,3作为输出,因为我们不更改存储在图中并由a指向的Variable(1)
。
a = tf.Variable(1.0)
b = tf.assign(b, a*3)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(b))
print(sess.run(b))
变量(1)-> scaler_multiplication(3)->分配(a)
两次执行此图形将给我们3,9,因为a显示Variable(1)
,在其中分配a*3
的结果将导致Variable(1)
变为variable(3)
,再次运行它将给出3 * 3 = 9