在本教程中,它解释了图形级别的种子和操作级别的种子。令人困惑的是,在设置图形级种子之后,在同一会话中打印相同的变量,但却获得了不同的值,如代码所示:
tf.compat.v1.random.set_random_seed(1234)
a = tf.random.uniform([1])
with tf.compat.v1.Session() as sess1:
print(sess1.run(a)) # generates 'A1'
print(sess1.run(a)) # generates 'A2'即使在设置了操作级种子之后,仍然打印出不同的结果。
发布于 2019-07-11 15:48:30
我的理解是,设置种子用于设置随机生成器的起始位置。因此,第一个印刷品是种子为1234的第一个随机制服,而第二个印刷品是种子为1234的第二个随机制服。对于新会话,种子将再次设置为1234。
Set seed通常用于确保您在不同的运行和不同的硬件上获得相同的场景。否则,使用依赖于随机生成器的错误搜索代码将非常困难和令人沮丧。
例如,我们可以启动两个不同的会话,并检查它们是否相同:
import tensorflow as tf
tf.compat.v1.random.set_random_seed(1234)
a = tf.random.uniform([1])
print('session 1')
with tf.compat.v1.Session() as sess1:
print(sess1.run(a)) # generates 'A1'
print(sess1.run(a)) # generates 'A1'
print('session 2')
with tf.compat.v1.Session() as sess1:
print(sess1.run(a)) # generates 'A1'
print(sess1.run(a)) # generates 'A1'
>> session 1
>> [0.96046877]
>> [0.8362156]
>> session 2
>> [0.96046877]
>> [0.8362156]正如预测的那样,两个会话都会给出相同的输出。如果你在你的电脑上试一下,你应该会得到相同的输出。
这是一个如何在会话之间设置种子的示例。相反,在会话级别设置随机种子,似乎不可能到目前为止?有关这方面的更深入的讨论,请参阅comment for this question
https://stackoverflow.com/questions/56983494
复制相似问题