Python tensorflow:tf.set_random_seed()的代码相同,但得到的结果不同

Python tensorflow:tf.set_random_seed()的代码相同,但得到的结果不同,python,tensorflow,horovod,Python,Tensorflow,Horovod,简而言之,在tensorflow中,除了tf.set_random_seed(),是否还有其他配置需要设置以重现相同的结果?我的代码中没有numpy操作。 长版本: 我正在用horovod训练一个模型,我想重现调试结果。在构建图形之前,我设置tf.set_random_seed(1)。所有操作都在tensorflow中,没有numpy 我只是重新运行了几次训练脚本,代码没有被修改 据我所知,它们应该产生相同的结果,因为图形是按相同的顺序构建的,而随机种子的设置是相同的。session.run顺序

简而言之,在tensorflow中,除了tf.set_random_seed(),是否还有其他配置需要设置以重现相同的结果?我的代码中没有numpy操作。

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

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

据我所知,它们应该产生相同的结果,因为图形是按相同的顺序构建的,而随机种子的设置是相同的。session.run顺序不会导致不同,更不用说我没有更改代码

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

具体地说,我可以看到输入图像是按相同的顺序读取的,而步骤“tf.image.random\u flip\u left\u right”使用相同的种子生成随机翻转

但是我用下面的代码测试了tf.image.random\u flip\u left\u right,得到了相同的结果。所以这个函数没有bug。它确实接受了全球tf random_种子,并产生了相同的结果

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))

它怎么可能是同一种子和图形的随机翻转?任何建议都将不胜感激。

您能在
tf.image.random\u flip\u left\u right(image,seed=0)
中设置种子并进行测试吗

编辑

好的,您说过代码中没有使用numpy,但TF将其用于一些内部任务。那么,你能不能再尝试一下,这次也修复一下numpy种子

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

如果这也不起作用,那么问题可能是霍洛沃德的问题。

谢谢你的回复!奇怪的是,即使我设置seed=0,这个操作在2次运行中仍然会产生不同的结果。为什么不呢?。是官方文件。对不起,我的意思是它仍然会产生不同的结果。我将numpy.random.seed(0)设置在tf.set_random_seed()之后,那么这一定是由于Horovod或代码中缺少的其他原因。另外,在没有Horovod的其他机器上试用。好的,谢谢。现在我正在深入研究batching.map\u和批处理操作。在此操作中,随机翻转处于“过程”中。我认为随机数是由顺序生成的,这与数据处理过程有关。如果有任何结论,我会更新。