这段代码定义了两个回调类(TensorboardCallback
和 SaveVecNormalizeCallback
),用于在强化学习训练过程中执行特定的操作。这些回调类是基于 Stable-Baselines3
库的 BaseCallback
和 EvalCallback
实现的。以下是对代码的详细解释:
1. 导入模块
-
os
: 用于处理文件路径和目录操作。 -
typing
: 用于类型注解(如Optional
,Union
,List
)。 -
wandb
: 用于与 Weights & Biases(W&B)集成,记录实验数据和可视化。 -
numpy
和pandas
: 用于数据处理和操作。 -
gymnasium
: 用于定义和管理强化学习环境。 -
stable_baselines3
: 提供了强化学习算法的实现和工具(如EvalCallback
和BaseCallback
)。 -
自定义模块(如
greenlight_gym.common.evaluation
和greenlight_gym.common.utils
):用于评估策略、日期转换等。
2. TensorboardCallback
类
这是一个自定义回调类,继承自 EvalCallback
,用于在训练过程中记录数据到 TensorBoard 和 W&B,并保存最佳模型。
构造函数 (__init__
)
-
参数:
-
eval_env
: 评估环境(可以是gym.Env
或VecEnv
)。 -
n_eval_episodes
: 每次评估时运行的 episode 数量。 -
eval_freq
: 评估频率(每隔多少步评估一次)。 -
log_path
: 日志保存路径。 -
best_model_save_path
: 最佳模型保存路径。 -
deterministic
: 是否使用确定性策略进行评估。 -
path_vec_env
和name_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. 代码的应用场景
这段代码主要用于强化学习训练过程中:
-
监控和记录训练过程:通过 TensorBoard 和 W&B 记录评估结果,方便后续分析和可视化。
-
保存最佳模型:在训练过程中自动保存表现最好的模型。
-
保存环境状态:定期保存
VecNormalize
的状态,确保训练中断后可以恢复环境的状态。
总结
这段代码实现了两个回调类:
-
TensorboardCallback
:用于评估策略、记录结果、保存最佳模型,并与 TensorBoard 和 W&B 集成。 -
SaveVecNormalizeCallback
:用于定期保存VecNormalize
的状态。
这些回调类可以显著增强强化学习训练过程的可监控性和可恢复性。