为什么张量流 random_normal函数提供具有固定种子值的不同输出



我设置了一个固定的种子值,并使用以下代码行运行会话。

with tf.Session() as sess:
matrix = tf.random_normal([2,2], mean=1, stddev=1, seed=1)
print(matrix.eval())
print(matrix.eval())
print(matrix.eval())
print(sess.run(matrix))
print(sess.run(matrix))
print(sess.run(matrix))
print(sess.run(matrix))

但是代码给了我这样的输出,

[[1.2818339 3.3878284]
[3.2804048 0.691338 ]]
[[0.84588486 1.3642604 ]
[1.6235023  0.96976113]]
[[2.3133767 2.4734092]
[1.6430309 0.7378005]]
[[ 1.8944461   0.39336425]
[ 0.1861412  -0.01721728]]
[[-0.6642921   2.3849297 ]
[-0.06870818 -0.1625154 ]]
[[ 1.0668459   0.45170426]
[ 2.4276698  -0.24925494]]
[[1.8668368  1.3444978 ]
[1.5144594  0.31290668]]

我希望打印精确的值,因为我固定了种子值。为什么它会打印出不同的值? 谢谢

在每次运行中,都会重新评估您的计算图,从而生成新的随机数,但不会重置种子。

我认为再次运行整个 Python 文件应该给出与以前相同的输出。

Seed 仅用于初始化matrix。每次运行session时,矩阵都将使用相同的值进行初始化。

但是,每次调用matrix.eval()时,它都会为您提供随机值链中的下一个随机值。

如果您想要始终相同的数字,则必须执行以下操作,尽管我怀疑它的用处。

with tf.Session() as sess:
matrix = tf.random_normal([2,2], mean=1, stddev=1, seed=1)
print(matrix.eval())
matrix = tf.random_normal([2,2], mean=1, stddev=1, seed=1)
print(matrix.eval())

返回:

[[ 1.28183389  3.38782835]
[ 3.28040481  0.691338  ]]
[[ 1.28183389  3.38782835]
[ 3.28040481  0.691338  ]]

最新更新