callbacks.py

这段代码定义了两个回调类(TensorboardCallbackSaveVecNormalizeCallback),用于在强化学习训练过程中执行特定的操作。这些回调类是基于 Stable-Baselines3 库的 BaseCallbackEvalCallback 实现的。以下是对代码的详细解释:


1. 导入模块

  • os: 用于处理文件路径和目录操作。

  • typing: 用于类型注解(如 Optional, Union, List)。

  • wandb: 用于与 Weights & Biases(W&B)集成,记录实验数据和可视化。

  • numpypandas: 用于数据处理和操作。

  • gymnasium: 用于定义和管理强化学习环境。

  • stable_baselines3: 提供了强化学习算法的实现和工具(如 EvalCallbackBaseCallback)。

  • 自定义模块(如 greenlight_gym.common.evaluationgreenlight_gym.common.utils):用于评估策略、日期转换等。


2. TensorboardCallback

这是一个自定义回调类,继承自 EvalCallback,用于在训练过程中记录数据到 TensorBoard 和 W&B,并保存最佳模型。

构造函数 (__init__)

  • 参数:

    • eval_env: 评估环境(可以是 gym.EnvVecEnv)。

    • n_eval_episodes: 每次评估时运行的 episode 数量。

    • eval_freq: 评估频率(每隔多少步评估一次)。

    • log_path: 日志保存路径。

    • best_model_save_path: 最佳模型保存路径。

    • deterministic: 是否使用确定性策略进行评估。

    • path_vec_envname_vec_env: 用于加载 VecNormalize 的路径和文件名。

    • callback_on_new_best: 当找到新最佳模型时触发的回调。

    • run: W&B 的运行对象,用于记录实验数据。

    • results: 自定义的 Results 类,用于存储和保存结果。

    • verbose: 控制日志输出的详细程度。

  • 功能:

    • 初始化父类 EvalCallback

    • 设置 W&B 和结果保存的相关参数。

    • 如果启用了结果保存,创建保存结果的目录。

_on_step 方法

  • 功能:

    • 每隔 eval_freq 步执行一次评估。

    • 同步训练环境和评估环境的 VecNormalize 状态(如果存在)。

    • 调用 evaluate_policy 函数评估策略,获取 episode 的奖励、长度、动作、观察值等信息。

    • 将评估结果记录到日志中,并保存到文件(如果指定了 log_path)。

    • 如果当前评估的奖励是历史最佳,保存模型,并更新结果。

    • 如果启用了 W&B,将结果记录到 W&B 中。

    • 如果启用了结果保存,将结果保存到 CSV 文件。


3. SaveVecNormalizeCallback

这是一个自定义回调类,继承自 BaseCallback,用于定期保存 VecNormalize 的状态。

构造函数 (__init__)

  • 参数:

    • save_freq: 保存频率(每隔多少步保存一次)。

    • save_path: 保存路径。

    • name_prefix: 保存文件的前缀(可选)。

    • verbose: 控制日志输出的详细程度。

  • 功能:

    • 初始化父类 BaseCallback

    • 设置保存频率和路径。

_init_callback 方法

  • 功能:

    • 在回调初始化时创建保存目录(如果不存在)。

_on_step 方法

  • 功能:

    • 每隔 save_freq 步保存一次 VecNormalize 的状态。

    • 如果指定了 name_prefix,文件名会包含前缀和时间步数;否则,文件名为 vecnormalize.pkl

    • 保存完成后,输出日志信息(如果 verbose > 1)。


4. 代码的核心功能

  • TensorboardCallback:

    • 定期评估策略,记录评估结果(如奖励、利润、违规次数等)。

    • 将结果记录到 TensorBoard 和 W&B。

    • 保存最佳模型和评估结果。

  • SaveVecNormalizeCallback:

    • 定期保存 VecNormalize 的状态,以便在训练中断后可以恢复环境的状态。


5. 代码的应用场景

这段代码主要用于强化学习训练过程中:

  1. 监控和记录训练过程:通过 TensorBoard 和 W&B 记录评估结果,方便后续分析和可视化。

  2. 保存最佳模型:在训练过程中自动保存表现最好的模型。

  3. 保存环境状态:定期保存 VecNormalize 的状态,确保训练中断后可以恢复环境的状态。


总结

这段代码实现了两个回调类:

  1. TensorboardCallback:用于评估策略、记录结果、保存最佳模型,并与 TensorBoard 和 W&B 集成。

  2. SaveVecNormalizeCallback:用于定期保存 VecNormalize 的状态。

这些回调类可以显著增强强化学习训练过程的可监控性和可恢复性。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇