设置Tensorflow图级种子后,为什么随机值在同一会话中具有不同的值?

时间:2019-07-11 07:09:41

标签: tensorflow random-seed

在本教程中,它说明了图形级种子和操作级种子。令人困惑的是,在设置了图形级种子之后,在同一会话中打印相同的变量,但是却得到了不同的值,如代码所示:

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'

即使设置了操作级种子,仍然可以打印出不同的结果。

1 个答案:

答案 0 :(得分:0)

我的理解是,设置种子用于设置随机生成器的起始位置。因此,第一个打印是种子为1234的第一个随机制服,而第二个打印是种子为1234的第二个随机制服。对于新会话,种子将再次设置为1234。

设置种子通常用于确保在不同的运行和不同的硬件上获得相同的方案。否则,对错误搜索代码进行依赖于随机生成器的错误将非常困难且令人沮丧。

作为示例,我们可以启动两个不同的会话并检查它们是否相同:

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]

正如预测的那样,两个会话都提供相同的输出。 如果您在计算机上尝试此操作,则应该获得相同的输出。

这是一个如何在会话之间设置种子的示例。取而代之的是在会话级别设置随机种子,到目前为止似乎还不可能吗? 要对此进行更深入的讨论,请参见评论for this question