问题标签 [openai-gym]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
tensorflow - 在 openai cartpole 上训练一个 tensorflow 模型
我正在使用 tensorflow 实现我的第一个强化深度学习模型,我正在为此实现cartpole 问题。
我采用了一个使用六层的深度神经网络,该网络在随机生成的数据集上进行训练,其得分高于阈值。问题是模型没有收敛,最终得分平均保持在 10 分左右。
正如阅读某些帖子后所建议的那样,我应用了正则化和辍学以减少可能发生的任何过度拟合,但仍然没有运气。我也尝试降低学习率。
在训练一批之后,准确性也保持在 0.60 左右,尽管每次迭代中的损失都在减少,我认为即使在这些迭代之后它也会记住。尽管这种模型适用于简单的深度学习任务。
这是我的代码:
openai-gym - 有没有办法实现 OpenAI 的环境,每一步的动作空间都会发生变化?
有没有办法实现 OpenAI 的环境,每一步的动作空间都会发生变化?
machine-learning - 如何在 OpenAI 中创建新的健身房环境?
我的任务是制作一个 AI 代理,它将学习使用 ML 玩视频游戏。我想使用 OpenAI Gym 创建一个新环境,因为我不想使用现有环境。如何创建新的自定义环境?
另外,在没有 OpenAI Gym 帮助的情况下,我有没有其他方法可以开始开发制作 AI Agent 来玩特定的视频游戏?
asynchronous - 用于 Pong 发散的深度强化学习 (A3C) (Tensorflow)
我正在尝试实现我自己版本的Asynchronous Advantage Actor-Critic方法,但它无法学习 Pong 游戏。我的代码主要受到Arthur Juliani 和 OpenAI Gym 的 A3C 版本的启发。该方法适用于简单的 Doom 环境(在 Arthur Juliani 的代码中使用的环境),但是当我尝试 Pong 游戏时,该方法发散到始终执行相同操作的策略(总是向下移动,或总是向上移动,或始终执行无操作操作)。我的代码位于我的GitHub 存储库中。
我已经调整了我的网络,使其类似于 OpenAI Gym 的 A3C 版本使用的架构,即:
- 4 个具有相同规格的卷积层,它们是:32 个过滤器,3x3 内核,2x2 步幅,带有填充(padding='same')。最后一个卷积层的输出随后被展平并馈送到大小为 256 的 LSTM 层。LSTM 层的初始状态 C 和 H 作为输入给出。LSTM 层的输出然后被分成两个流:一个输出大小等于动作数量(策略)的全连接层和另一个只有一个输出(价值函数)的全连接层(更多细节在 Network.py我的代码);
- 使用的损失函数与原始 A3C 论文中的信息一样。基本上,策略损失是线性策略的log_softmax乘以优势函数。价值损失是价值函数与折扣奖励之差的平方。总损失包括价值损失、策略损失和熵。渐变被剪裁为 40(我的代码的 Network.py 中有更多详细信息);
- 只有一个全球网络和几个工作网络(每个工作人员一个网络)。仅更新全球网络。此更新是针对每个工作网络的局部梯度完成的。因此,每个工人模拟 BATCH_SIZE 迭代的环境,保存状态、价值函数、选择的动作、收到的奖励和 LSTM 状态。在 BATCH_SIZE(我使用 BATCH_SIZE = 20)迭代之后,每个工作人员将这些数据传递到网络中,计算折扣奖励、优势函数、总损失和局部梯度。然后它用这些梯度更新全局网络。最后,worker 的本地网络与全局网络同步(local_net = global_net)。所有工作人员都异步执行此操作(有关此步骤中的更多详细信息,请检查工作和在 Worker.py 中训练Worker 类的方法);
- LSTM 状态 C 和 H 在情节之间重置。同样重要的是要注意当前状态 C 和 H 由每个工人本地保存;
- 为了将梯度应用到全局网络,我使用了学习率 = 1e-4 的 Adamoptimizer。
我已经尝试了网络的不同配置(通过尝试几种不同的卷积层配置,包括不同的激活函数)、具有不同参数配置的其他优化器( RMSPropOptimizer和AdadeltaOptimizer )以及 BATCH_SIZE 的不同值。但它几乎最终转向了一种总是只执行一个动作的策略。我的意思是总是因为在某些配置中,代理在几个情节中维持类似于随机策略的策略,但没有明显的改进(我等到 62k 情节才放弃这些情况)。
因此,我想知道是否有人在使用带有 LSTM 层的 A3C 训练 Pong 游戏中的智能体方面取得了成功。如果是这样,使用的参数是什么?任何帮助,将不胜感激!
[编辑]正如我在评论中所说,我设法通过在计算梯度之前提供正确的 LSTM 状态来部分解决问题(而不是提供初始化的 LSTM 状态)。这使得该方法在 PongDeterministic 环境中学习得相当好。但是当我尝试 Breakout-v0 时问题仍然存在:代理在大约 65k 集内达到 40 的平均分数,但在此之后它似乎停止了学习(它保持了这个分数一段时间)。我已经检查了 OpenAI 入门代理数次,我找不到我的实现与他们的实现之间的任何显着差异。任何帮助将不胜感激!
python - 如何解释 OpenAI 健身房中 RAM 环境的观察结果?
在一些 OpenAI 健身房环境中,有一个“ram”版本。例如:Breakout-v0
和Breakout-ram-v0
。
使用Breakout-ram-v0
,每个观察都是一个长度为 128 的数组。
问题:如何将观察Breakout-v0
(这是一个 160 x 210 图像)转换为观察形式Breakout-ram-v0
(长度为 128 的数组)?
我的想法是在环境上训练模型并显示训练后的模型使用环境Breakout-ram-v0
播放。Breakout-v0
python - OpenAI 健身房 mujoco ImportError:没有名为“mujoco_py.mjlib”的模块
我尝试在 openAi 健身房中运行此代码。但它不能。
错误信息:
我的电脑环境:
操作系统:macOS python:python3.5(conda envs)
我已经安装了“pip install 'gym [all]'”并安装了 mujoco。
我可以运行 mujoco 的示例。它是成功的。
tensorflow - 为什么 q-learning 函数在 openai 山地车中不收敛
更新 1:修改了贪婪的 epsilon 政策,因为在使 epsilon 数量非常少之前所花费的情节数量非常少。我已经更新了代码。
新问题是经过充分训练后它不应该有太大的偏差,但它会选择错误的值并立即发散是 epsilon 变小
我已经在openai 健身房平台上工作了很长一段时间,因为我的目标是了解更多关于强化学习的知识。在堆栈溢出用户@sajad 的帮助下,我已经成功实现了双深度 Q 学习(DQN)和优先体验重播(PER)。在cart-pole 问题上,通过仔细的超参数调整获得了非常好的成功率。这是迄今为止我学到的最好的算法,但无论我做什么,我似乎都无法在山地车问题上得到这项工作,因为剧集的奖励总是保持在 -200。我查看了我的代码,从各种教程中我认为我的内存实现是正确的。
从基本 DQN 到 PER 的 DQN 的算法似乎都不起作用。
如果我能在调试代码或任何其他可能导致它不收敛的实现更改方面获得一些帮助,那将会很有帮助
这是我的实现:所有参数都有常用名称
这里的参考是作为单独模块实现的内存的实现:
提前致谢
python - 在 Open AI Gym 中实现策略迭代方法
我目前正在阅读 Sutton & Barto 的“强化学习”,并且正在尝试自己编写一些方法。
策略迭代是我目前正在研究的。我正在尝试使用 OpenAI Gym 解决一个简单的问题,例如 CartPole 或连续山地车。
但是,对于策略迭代,我需要状态之间的转换矩阵和奖励矩阵。
这些是否可以从您在 OpenAI Gym 中构建的“环境”中获得。
我正在使用python。
如果不是,我如何计算这些值并使用环境?
docker - 如何使用 nvidia-docker 正确运行 OpenAI gym 并查看环境
所以我正在尝试在 docker 容器中设置运行 OpenAI gym,但它看起来像这样:
请注意,乒乓窗口有一个奇怪的渲染问题,它正在重复事物并且颜色关闭。这是太空侵略者:
“不是编程问题”的人注意:该解决方案涉及正确的 bash 脚本代码来调用正确的 API 方法来正确呈现像素数组。也只有图形程序员可能“识别渲染故障”。
我的设置非常简单。- 我正在使用 Nvidia gtx1060 和 corei7 安装本地 ubuntu 16.04 - 我使用 --no-opengl-files 安装了 nvida 运行文件驱动程序(根据 Nvidia 和许多地方的说明)。- 具体来说,我正在运行 floydhub/pytorch docker 映像。
有没有人认识到特定的渲染故障以及它可能意味着什么?它几乎看起来像帧缓冲区的 StackOverflow!我可以做些什么来追踪错误?
编辑:我已经消除了我一直在安装的所有额外依赖项,并且只是根据 ROS GUI 指南进行简单的 x 转发。
您可以按如下方式轻松重现此内容:
现在在图像中,键入python
,然后键入以下内容:
这应该会在您的机器上打开一个 x-forwarded 窗口,但显示已损坏(至少对我而言)
上面我实际使用了 SpaceInvaders-v0
keras - 为什么 keras-rl 示例总是在输出层选择线性激活?
我是强化学习的新手。我有一个关于 keras-rl 代理的输出层激活函数选择的问题。在 keras-rl ( https://github.com/matthiasplappert/keras-rl/tree/master/examples ) 提供的所有示例中,在输出层中选择线性激活函数。为什么是这样?如果我使用不同的激活函数,我们会期待什么效果?例如,如果我使用离散动作空间为 5 的 OpenAI 环境,我是否还应该考虑在代理的输出层中使用 softmax?提前非常感谢。