Gymnasium项目教程:如何记录智能体训练与评估过程

Gymnasium项目教程:如何记录智能体训练与评估过程

Gymnasium An API standard for single-agent reinforcement learning environments, with popular reference environments and related utilities (formerly Gym) Gymnasium 项目地址: https://gitcode.com/gh_mirrors/gy/Gymnasium

前言

在强化学习的研究和开发过程中,记录智能体的表现是至关重要的环节。Gymnasium提供了两个强大的封装器(Wrapper)来帮助我们完成这项工作:RecordEpisodeStatisticsRecordVideo。本文将详细介绍如何使用这两个工具来记录智能体的训练和评估过程。

核心封装器介绍

RecordEpisodeStatistics封装器

这个封装器用于记录每个回合(episode)的关键统计数据,包括:

  • 总奖励(Total rewards)
  • 回合长度(Episode length)
  • 耗时(Time taken)

这些数据对于评估智能体性能至关重要,可以帮助开发者了解训练过程中的进步情况。

RecordVideo封装器

这个封装器能够将智能体的表现录制为mp4视频文件,基于环境的渲染输出。视频记录对于直观展示智能体行为非常有用,特别是在需要视觉化分析问题时。

评估模式下的记录

当我们需要评估一个已经训练好的智能体时,通常会希望记录多个回合的表现。以下是一个完整的示例代码:

import gymnasium as gym
from gymnasium.wrappers import RecordEpisodeStatistics, RecordVideo

num_eval_episodes = 4

env = gym.make("CartPole-v1", render_mode="rgb_array")
env = RecordVideo(env, video_folder="cartpole-agent", name_prefix="eval",
                  episode_trigger=lambda x: True)
env = RecordEpisodeStatistics(env, buffer_length=num_eval_episodes)

for episode_num in range(num_eval_episodes):
    obs, info = env.reset()
    episode_over = False
    while not episode_over:
        action = env.action_space.sample()  # 这里替换为实际智能体的决策逻辑
        obs, reward, terminated, truncated, info = env.step(action)
        episode_over = terminated or truncated
env.close()

print(f'回合耗时: {env.time_queue}')
print(f'回合总奖励: {env.return_queue}')
print(f'回合长度: {env.length_queue}')

代码解析

  1. RecordVideo参数说明:

    • video_folder: 视频保存目录
    • name_prefix: 视频文件名前缀
    • episode_trigger: 触发记录的条件,这里设置为每个回合都记录
  2. RecordEpisodeStatistics参数说明:

    • buffer_length: 数据队列的最大长度,用于存储最近的回合统计数据
  3. 评估结束后,我们可以通过封装器提供的队列(time_queuereturn_queuelength_queue)来获取所有回合的统计数据。

训练模式下的记录

在训练过程中,由于回合数量庞大,我们通常不需要记录每个回合的视频,而是定期记录。同时,我们仍然需要收集每个回合的统计数据。以下是训练模式下记录的示例:

import logging

import gymnasium as gym
from gymnasium.wrappers import RecordEpisodeStatistics, RecordVideo

training_period = 250  # 每250个回合记录一次
num_training_episodes = 10_000  # 总训练回合数

env = gym.make("CartPole-v1", render_mode="rgb_array")
env = RecordVideo(env, video_folder="cartpole-agent", name_prefix="training",
                  episode_trigger=lambda x: x % training_period == 0)
env = RecordEpisodeStatistics(env)

for episode_num in range(num_training_episodes):
    obs, info = env.reset()
    episode_over = False
    while not episode_over:
        action = env.action_space.sample()  # 这里替换为实际智能体的决策逻辑
        obs, reward, terminated, truncated, info = env.step(action)
        episode_over = terminated or truncated

    logging.info(f"回合-{episode_num}", info["episode"])
env.close()

代码解析

  1. episode_trigger参数现在设置为每250个回合记录一次视频
  2. 使用Python的logging模块记录每个回合的统计数据
  3. 统计数据可以通过info["episode"]字典获取

性能优化建议

  1. 向量环境:对于评估多个回合,考虑使用向量环境(Vector Environment)并行执行多个环境实例,可以显著提高评估效率。

  2. 日志系统:除了Python自带的logging模块,还可以考虑集成更强大的日志系统如TensorBoard或Weights & Biases,它们提供了更丰富的数据可视化和分析功能。

  3. 视频压缩:当录制大量视频时,可以考虑在录制后自动压缩视频文件以节省存储空间。

常见问题解答

Q: 为什么我的视频没有生成? A: 请确保:

  1. 环境支持rgb_array渲染模式
  2. 指定的视频目录有写入权限
  3. episode_trigger条件设置正确

Q: 如何自定义视频质量? A: 目前Gymnasium没有直接提供视频质量参数,但你可以通过修改环境的分辨率来间接影响视频质量。

Q: 统计数据队列会占用多少内存? A: 内存占用取决于buffer_length参数和每个回合的数据量,对于大多数环境来说内存占用可以忽略不计。

结语

通过合理使用Gymnasium提供的记录功能,开发者可以更全面地了解智能体的训练过程和最终表现。无论是用于学术研究还是实际应用开发,这些记录工具都能提供宝贵的反馈信息,帮助改进和优化智能体算法。

Gymnasium An API standard for single-agent reinforcement learning environments, with popular reference environments and related utilities (formerly Gym) Gymnasium 项目地址: https://gitcode.com/gh_mirrors/gy/Gymnasium

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

常韵忆Imagine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值