【问题标题】:tensorflow: tf.set_random_seed() same code, but got different resultstensorflow: tf.set_random_seed() 相同的代码,但得到不同的结果
【发布时间】:2019-09-27 08:00:56
【问题描述】:

简而言之,在 tensorflow 中,除了 tf.set_random_seed(),我应该设置其他配置来重现相同的结果吗?我的代码中没有 numpy 操作。

长版: 我正在用 horovod 训练一个模型,我想重现结果以进行调试。我在构建图表之前设置了 tf.set_random_seed(1) 。所有操作都在tensorflow中,没有numpy。

而且我只是重新运行了几次训练脚本,代码没有被修改。

据我了解,它们应该产生相同的结果,因为图形是按相同的顺序构建的,并且 random_seed 设置相同。 session.run 的顺序不会造成不同,更何况我没有改代码。

但是,在多次运行相同的代码时,我仍然得到不同的结果。

具体来说,我可以看到输入图像以相同的顺序读取,并且步骤 'tf.image.random_flip_left_right' 产生具有相同种子的随机翻转。

但我通过以下代码测试了 tf.image.random_flip_left_right,得到了相同的结果。所以这个函数没有bug。它确实接受了全局 tf random_seed 并产生了相同的结果。

import tensorflow as tf                                                                                                              
tf.set_random_seed(0)
img_raw =tf.read_file('test.jpg')
image = tf.image.decode_jpeg(img_raw,channels=3,dct_method='INTEGER_ACCURATE')
image = tf.image.random_flip_left_right(image)

sess=tf.Session()
print(sess.run(image))

如何用相同的种子和图随机翻转?任何建议将不胜感激。

【问题讨论】:

    标签: python tensorflow horovod


    【解决方案1】:

    您可以在tf.image.random_flip_left_right(image, seed = 0) 中设置种子并进行测试吗?

    编辑

    好的,你说你没有在代码中使用 numpy,但 TF 将它用于一些内部任务。所以,你能不能再试一次,这次也修复 numpy 种子。

    import numpy as np
    from numpy.random import seed
    seed(0)
    

    如果这也不起作用,那么问题可能出在Horovod 上,正如here 所讨论的那样。

    【讨论】:

    • 感谢您的回复!奇怪,即使我设置了seed=0,这个操作在2次运行中仍然会产生不同的结果。
    • 为什么不呢? Here是官方文档。
    • 对不起,我的意思是它仍然会产生不同的结果。我在 tf.set_random_seed() 之后设置了 numpy.random.seed(0)
    • 那么它一定是因为 Horovod 或您的代码中缺少的其他东西。另外,在没有 Horovod 的其他机器上试一试。
    • 好的,谢谢。现在我正在研究 batching.map_and_batch 操作。在此操作中,随机翻转位于“process_fn”中。我在想随机数是按顺序生成的,跟数据处理进度有关。如果有任何结论,我会更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 2018-02-19
    • 2020-12-15
    相关资源
    最近更新 更多