我正在尝试升级到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))
Run Code Online (Sandbox Code Playgroud)
输出:
TensorFlow version: 0.12.1
[-0.39702964]
TensorFlow version: 1.0.1
[0.96574152]
Run Code Online (Sandbox Code Playgroud)
我正在Windows x64上运行python v3.5.2.我在转换文档中没有看到描述这种差异的任何内容.升级后有没有办法重现我之前的结果?
最可能的罪魁祸首是初始化器创建的随机操作之前生成的操作数量正在改变。如果您没有设置每个操作的种子,TensorFlow 会根据随机操作的整数 id 选择种子,这只是在该点之前创建的操作数。您可能必须重写传递给的初始值设定项tf.get_variable如果您想通过设置显式种子来测试它,
一般来说,我们不承诺不同版本的 TensorFlow 之间的随机数一致性。我们确实尝试记录它们何时发生变化,但这仅在您设置每个操作种子时才有用,因为我们不会尝试记录操作数何时发生变化。该链接的相关位是
随机数:由随机操作计算的特定随机数可能随时改变:用户应该仅依赖于近似正确的分布和统计强度,而不是计算的特定位。但是,我们很少会对随机位进行更改,最好永远不会在补丁版本中进行更改,并且所有此类预期更改都将被记录下来。