深度强化学习课程文档

训练我们的机器人

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

训练我们的机器人

为了开始训练,我们首先需要在安装了 Godot RL Agents 的相同 venv / conda 环境中安装 imitation 库,使用命令:pip install imitation

从 Godot RL 仓库下载模仿学习脚本的副本。

使用以下参数运行训练:

sb3_imitation.py --env_path="path_to_ILTutorial_executable" --bc_epochs=100 --gail_timesteps=1450000 --demo_files "path_to_expert_demos.json" --n_parallel=4 --speedup=20 --onnx_export_path=model.onnx --experiment_name=ILTutorial

将 env 路径设置为导出的游戏,将 demo 文件路径设置为录制的 demos。如果您有多个 demo 文件,请用空格分隔它们,例如 --demo_files demos.json demos2.json

您还可以为 --gail_timesteps 设置大量时间步,然后使用 CTRL+C 手动停止训练。我用这种方法在奖励开始接近 3 时停止了训练,此时 total_timesteps | 1.38e+06。这大约花了 41 分钟,而 BC 预训练在我的 PC 上使用 CPU 训练大约花了 5.5 分钟。

要在训练期间观察环境,请添加 --viz 参数。在 BC 训练期间,环境将冻结,因为此阶段除了获取有关观察和动作空间的一些信息外,不使用环境。在 GAIL 训练阶段,环境渲染将更新。

以下是使用 tensorboard 显示的日志中的 ep_rew_meanep_rew_wrapped_mean 统计数据,我们可以看到它们在这种情况下非常匹配

training results
您可以在 `logs/ILTutorial` 中找到日志,该路径是相对于您开始训练的路径。如果进行多次运行,请在每次运行之间更改 `--experiment_name` 参数。

尽管在此处设置环境奖励并非必要且未用于训练,但我们实现了一个简单的稀疏奖励来跟踪成功。掉出地图、掉入水中或陷阱会使 reward += -1,而激活杠杆、收集钥匙和打开宝箱都会使 reward += 1。如果 ep_rew_mean 接近 3,我们就取得了不错的结果。ep_rew_wrapped_mean 是 GAIL 判别器的奖励,它不能直接告诉我们代理在解决环境方面有多成功。

让我们测试训练好的智能体

训练结束后,您会在启动训练脚本的文件夹中找到一个 model.onnx 文件(您也可以在控制台的训练日志中,接近末尾处找到 .onnx 文件的完整路径)。将其复制到 Godot 游戏项目文件夹。

打开 onnx 推理场景

这个场景,像演示录制场景一样,只使用了一个关卡副本。它的 Sync 节点模式也设置为 Onnx Inference

点击 Sync 节点,并将 Onnx Model Path 属性设置为 model.onnx

onnx inference scene

按 F6 启动场景,让我们看看智能体学到了什么!

训练好的智能体视频

看来智能体能够从两个位置(左平台或右平台)收集钥匙,并很好地复制了录制的行为。如果您得到了类似的结果,恭喜您,您已成功完成本教程! 🏆👏

如果您的结果差异很大,请注意,录制演示的数量和质量可能会影响结果,调整 BC/GAIL 阶段的步数以及修改 Python 脚本中的超参数可能会有所帮助。此外,运行之间也存在一些差异,因此即使设置相同,结果有时也会略有不同。

< > 在 GitHub 上更新