什么是张量流中的意思

时间:2019-07-16 06:37:39

标签: tensorflow

我是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

1 个答案:

答案 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