tensorflow随机变量是否仅在每个sess.run中创建一次?

时间:2018-03-02 05:38:14

标签: tensorflow

如果我有这样的话:

a = tf.random_uniform((1,), dtype=tf.float32)
b = 1 + a
c = 2 + a

在计算abc是相同还是不同?

2 个答案:

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

@heena bawa

回答

对于每个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..
相关问题