Tensorflow:相同随机种子的不同结果

May*_*ybe 4 python random random-seed tensorflow openai-gym

我正在 tensorflow 中实现的健身房环境(BipedalWalker-v2)中运行强化学习程序。我手动设置了环境的随机种子,tensorflow 和 numpy 如下

os.environ['PYTHONHASHSEED']=str(42)
random.seed(42)
np.random.seed(42)
tf.set_random_seed(42)

env = gym.make('BipedalWalker-v2')
env.seed(0)

config = tf.ConfigProto(intra_op_parallelism_threads=1, inter_op_parallelism_threads=1)
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)
# run the graph with sess
Run Code Online (Sandbox Code Playgroud)

但是,每次运行我的程序时都会得到不同的结果(不更改任何代码)。为什么结果不一致,如果我想获得相同的结果应该怎么做?


更新:

我能想到的唯一可能引入随机性的地方(神经网络除外)是

  1. tf.truncated_normal用来生成随机噪声epsilon以实现噪声层
  2. 我用来np.random.uniform从重放缓冲区中随机选择样本

我还发现我在前 10 集中得到的分数非常一致,但随后开始有所不同。损失等其他因素也显示出类似的趋势,但在数字上并不相同。

更新 2

我还设置了“PYTHONHASHSEED”并按照@jaypops96 的描述使用单线程 CPU,但仍然无法重现结果。上面代码块中的代码已经更新

Pet*_* O. 5

我建议检查您的 TensorFlow 图是否包含非确定性操作。例如,reduce_sum在 TensorFlow 1.2 之前就是这样一种操作。这些操作是不确定的,因为浮点加法和乘法是非关联的(浮点数相加或相乘的顺序会影响结果),并且因为此类操作不能保证每次都以相同的顺序添加或相乘它们的输入. 另请参阅此问题

编辑(2020 年 9 月 20 日):GitHub 存储库framework-determinism提供了有关机器学习框架(尤其是 TensorFlow)中不确定性来源的更多信息。