我遇到了一个问题,当在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种子?
答案 0 :(得分:1)
According to the docs,定义图形操作时可以设置两种类型的种子:
tf.set_random_seed
和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