如果我有这样的话:
a = tf.random_uniform((1,), dtype=tf.float32)
b = 1 + a
c = 2 + a
在计算a
和b
时c
是相同还是不同?
答案 0 :(得分:3)
每次执行sess.run()
时,都会生成不同的结果,如tensorflow的官方文档中所示。
例如,给出以下代码:
import tensorflow as tf
a = tf.random_uniform((1,), dtype=tf.float32)
b = 1 + a
c = 2 + a
init = tf.global_variables_initializer()
sess = tf.Session()
print(sess.run(a))
print(sess.run(b))
print(sess.run(c))
print(sess.run(a))
它会产生不同的a值,因此b的值将是 1 + a(新生成的) 其中a(新生成的)与a不同。
<强>输出:强>
[ 0.13900638] # value of a
[ 1.87361598] # value of b = 1 + 0.87361598(!= a)
[ 2.81547356] # value of c = 2 + 0.81547356(!= a)
[ 0.00705874] # value of a(!= previous value of a)
答案 1 :(得分:1)
对于每个sess.run(),将重新初始化值。
要解决该问题,我们初始化会话并调用一次运行。如果预期有多个结果,那么它们将在列表中传递:
import tensorflow as tf
a = tf.random_uniform((1,), dtype=tf.float32)
b = 1 + a
c = 2 + a
init = tf.global_variables_initializer()
with tf.Session() as sess:
print(sess.run([c, b, a]))
输出:
[array([2.0236197], dtype=float32), array([1.0236198], dtype=float32), array([0.02361977], dtype=float32)]
# c is 2.023..
# b is 1.023..
# a is 0.023..