tf.set_random_seed似乎无法正确设置种子

时间:2019-06-15 06:02:57

标签: python tensorflow random

我遇到了一个问题,当在python上使用Tensorflow进行编程时,tf.set_random_seed无法生成可重复的值。具体来说,

import tensorflow as tf
sd = 1
tf.set_random_seed(seed = sd)

tf.reset_default_graph()
sess = tf.InteractiveSession()
print(sess.run(tf.random_normal(shape=[1], mean=0, stddev=1)))

以上代码输出[1.3086201]。然后,我再次运行了整个代码,它没有输出期望值[1.3086201],而是给出了一个新的[-2.1209881]

为什么会发生这种情况以及如何设置Tensorflow种子?

1 个答案:

答案 0 :(得分:1)

According to the docs,定义图形操作时可以设置两种类型的种子:

  1. tf.set_random_seed
  2. 设置的图形级种子
  3. 放置在变量初始值设定项中的
  4. 操作级种子
然后,

Tensorflow使用一组精心设计的规则(请参阅文档)为依赖种子的操作生成唯一值。初始化变量后,您可以使用图形级种子重现随机输出,但是随后对该变量的重新初始化通常会产生不同的值。

在您的代码中,您每次运行代码时都会重新初始化tf.random_normal,因此它是不同的。


如果您希望tf.random_normal生成相同的唯一序列,则无论重新初始化多少次,都应设置操作级种子

sess = tf.InteractiveSession()

print(sess.run(tf.random_normal(shape=[1], mean=0, stddev=1, seed=1))) 
# -0.8113182
print(sess.run(tf.random_normal(shape=[1], mean=0, stddev=1, seed=1)))
# -0.8113182