张量流:tf.set_random_seed()相同的代码,但是得到了不同的结果

时间:2019-09-27 08:00:56

标签: python tensorflow horovod

简而言之,在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,它给出了相同的结果。因此,此功能没有错误。它确实接受了全局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))

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

1 个答案:

答案 0 :(得分: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