首页 > 解决方案 > tensorflow: tf.set_random_seed() 相同的代码,但得到不同的结果

问题描述

简而言之,在 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))

相同的种子和图怎么能随机翻转呢?任何建议将不胜感激。

标签: pythontensorflowhorovod

解决方案


你能播下种子tf.image.random_flip_left_right(image, seed = 0)并进行测试吗?

编辑

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

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

如果这也不起作用,那么问题可能出在此处Horovod讨论的问题上。


推荐阅读