python - DQN 在不同的计算机上表现不同
问题描述
我有一个或多或少标准的 DQN 实现来解决 Atari “Breakout”(来自 Coursera 强化学习课程),它在不同的计算机上表现完全不同:
- 在我的笔记本电脑上,每次运行它都会收敛
- 在 Coursera 和 Google Colab 服务器上,它永远不会收敛!
我用
- Python3
- 张量流
- Kerass(仅适用于 Conv2D、Flatten 和 Dense 层)
我已经在这个问题上花了大约两个星期没有任何进展:(
我已经检查过:
- 版本:
- Python:相同(3.6.7)
- Tensorflow:相同(用 1.4.0 和 1.5.0 测试)
- numpy:相同的错误修复编号(1.16.2 与 1.16.3)
- 随机种子
- float32 vs float64:我总是传递
dtype=np.float32
给每个 np.array 和 tf.placeholder 调用。 - CPU/GPU
- 我的笔记本电脑会聚,使用旧 CPU(将 Tensorflow 限制为 <= 1.5.0)
- 在 Coursera 服务器上,永远不会收敛:CPU?
- 在 Google Colab 服务器上,永远不会收敛:GPU
我的问题是:
- 不同行为的原因可能是什么?
- 如何调试此类问题?
- 我还可以做什么/检查以最终找到问题?
更新:所有代码(包括超参数、环境、...)都完全相同。
解决方案
我假设您使用给定的超参数值运行某个版本的代码。然后,如果您使用它,您需要在代码开头为tensorflow
(eg tf.set_random_seed(1)
)、for numpy
(eg ) 和随机修复随机种子。np.random.seed(1)
此外,您必须在所有机器上安装相同版本的 tensorflow。我有一个经验,即使是 1.3 和 1.8 之间的正向传递也会导致两个不同的输出。需要同样的检查gym
。
最后,您必须检查 cpu 或 gpu。您无法将 cpu 运行的结果与 gpu 运行的结果进行比较。
colab
如果这些检查都不起作用,如果你想分享它,我可以检查你的代码。
推荐阅读
- powerbi - Power BI,在同一个表中显示类别平均行
- ionic-framework - 离子资源 Android 不工作,离子 v1
- jenkins - 在目标实例文件夹中看不到从一个实例复制到另一个实例的 Jenkins 作业?
- c# - 来自通用输入的 C# 代理通用参数
- amazon-web-services - 如何测量云环境中虚拟机的功耗?
- c# - 有没有办法让 asp.net Boundfield 成为链接?
- shiny - 闪亮的动态模态对话框渲染* difftime
- jquery - 选择带有 id 的表格单元格
- html - 为什么在 html 中使用多个类?
- c++ - 如何从 C++ 中的成员函数内部调用非成员、非静态函数