DQN在不同的计算机上的行为各不相同

时间:2019-05-07 15:18:48

标签: python python-3.x tensorflow keras reinforcement-learning

我有一个或多或少的DQN标准实现来解决Atari的“ Breakout”问题(来自Coursera Reinforcement学习课程),在不同计算机上的行为完全不同:

  • 在我的笔记本电脑上,它会收敛每次我会运行
  • 在Coursera和Google Colab服务器上,它从不融合!

我使用

  • Python3
  • Tensorflow
  • Kerass(仅适用于Conv2D,Flatten和Dense层)

我已经在这个问题上花了两周时间,没有任何进展:(

我已经检查了:

  • 版本:
    • Python:相同(3.6.7)
    • Tensorflow:相同(已通过1.4.0和1.5.0测试)
    • numpy:修正错误编号(1.16.2与1.16.3)
  • 随机种子
  • float32与float64:我总是将dtype=np.float32传递给每个np.array和tf.placeholder调用。
  • CPU / GPU
    • 融合的笔记本电脑使用旧的CPU(将Tensorflow限制为<= 1.5.0)
    • 在Coursera服务器上,从不收敛:CPU?
    • 在Google Colab服务器上,从不收敛:GPU

我的问题是:

  • 不同行为可能是什么原因?
  • 如何调试此类问题?
  • 我还能做什么/检查以最终找到问题?

更新:所有代码(包括超参数,env等)都完全相同。

1 个答案:

答案 0 :(得分:1)

我假设您使用给定的超参数值运行特定版本的代码。然后,您需要在代码的开头为tensorflow(例如tf.set_random_seed(1)numpy(例如np.random.seed(1))和随机(如果使用)修复随机种子。它。

此外,您必须在所有机器上具有相同版本的tensorflow。我的经验是,即使1.3和1.8之间的正向传递也会导致两个不同的输出。 gym需要相同的检查。

最后,您必须检查cpu或gpu。您不能将cpu运行的结果与gpu运行的结果进行比较。

如果以上两项检查均无效,那么如果您想共享您的colab代码,我可以对其进行检查。