我试图升级到tensorflow版本1.0,但后来发现我无法重现我之前的输出,因为随机数生成器似乎有所不同。我需要能够重现我的结果,所以我总是将种子设置为常数值。
import tensorflow as tf
with tf.Graph().as_default():
tf.set_random_seed(1)
a = tf.get_variable('a', 1)
with tf.Session() as sess:
tf.global_variables_initializer().run()
print('TensorFlow version: {0}'.format(tf.__version__))
print(sess.run(a))
输出:
TensorFlow version: 0.12.1
[-0.39702964]
TensorFlow version: 1.0.1
[0.96574152]
我在Windows x64上运行python v3.5.2。我在转型文档中没有看到描述这种差异的任何内容。升级后有没有办法重现我之前的结果?
答案 0 :(得分:2)
最可能的罪魁祸首是在初始化程序创建的随机操作之前生成的操作数正在发生变化。如果您没有设置每个操作种子,TensorFlow会根据随机操作的整数id选择一个种子,这只是在该点之前创建的操作数。如果要通过设置显式种子来测试,可能必须手动覆盖传递给tf.get_variable
的初始值设定项。
一般来说,we don't promise random number consistency between different versions of TensorFlow。我们确实会尝试记录它们何时发生变化,但这只有在您设置每个种子的种子时才有用,因为我们不尝试记录操作数量何时发生变化。该链接的相关位是
随机数:随机运算所计算的特定随机数可能随时发生变化:用户应仅依赖近似正确的分布和统计强度,而不是计算出的具体位数。但是,我们很少会对随机位进行更改,理想情况下也不会对修补程序版本进行更改,并且将记录所有此类预期的更改。