You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Stable Baselines3训练PPO,如何在Wandb面板显示奖励函数曲线?

解决Wandb中无法查看PPO模型奖励曲线的问题

核心原因

你的自定义环境CustomOfflineEnv可能未正确实现Gym标准接口的奖励反馈逻辑,或者缺少必要的环境监控组件,导致Stable Baselines 3(SB3)无法收集并上传奖励数据到Wandb。

具体修复步骤

1. 确保自定义环境符合Gym规范

检查CustomOfflineEnv的step()方法返回值,必须严格遵循Gym接口:

def step(self, action):
    # 执行动作逻辑
    observation = ...  # 下一个观测值
    reward = ...       # 当前步的奖励值(必须是数值类型)
    done = ...         # 是否结束当前episode的布尔值
    info = ...         # 额外信息,当done=True时,建议加入'episode'键:{'episode': {'r': total_episode_reward, 'l': episode_length}}
    return observation, reward, done, info

如果是离线环境,需要确保在模拟episode过程中正确累计并返回每步奖励,以及在episode结束时通过info传递总奖励。

2. 添加环境监控组件

SB3需要通过Monitor和VecMonitor来收集episode级别的奖励数据,修改环境初始化代码:

from stable_baselines3.common.monitor import Monitor
from stable_baselines3.common.vec_env import DummyVecEnv, VecMonitor

# 用Monitor包裹自定义环境,再转为VecEnv并添加VecMonitor
vec_env = DummyVecEnv([lambda: Monitor(CustomOfflineEnv(data="data.csv"))])
vec_env = VecMonitor(vec_env)

VecMonitor会自动记录每个episode的总奖励和长度,并将数据写入TensorBoard,而你开启的sync_tensorboard=True会同步这些数据到Wandb。

3. 加入评估回调(可选,更直观的性能曲线)

如果是离线训练,建议定期评估模型在环境中的表现,通过EvalCallback记录评估奖励:

from stable_baselines3.common.callbacks import EvalCallback

# 创建评估环境(和训练环境一致)
eval_env = DummyVecEnv([lambda: Monitor(CustomOfflineEnv(data="data.csv"))])
eval_env = VecMonitor(eval_env)

# 初始化评估回调
eval_callback = EvalCallback(
    eval_env,
    eval_freq=1000,  # 每训练1000步评估一次
    best_model_save_path=f"../../training/models/ppo/best_{name}{run.id}",
    log_path=f"../../training/logs/ppo/{name}{run.id}",
    deterministic=True,
    verbose=verbosity
)

# 在model.learn中同时加入WandbCallback和EvalCallback
model.learn(
    total_timesteps=config["total_timesteps"],
    callback=[
        WandbCallback(
            gradient_save_freq=100,
            model_save_freq=100,
            model_save_path=f"../../training/models/ppo/{name}{run.id}",
            log_freq=10,  # 增加日志频率,确保奖励数据及时上传
            verbose=verbosity
        ),
        eval_callback
    ]
)

4. 验证Wandb数据

重启训练后,在Wandb控制面板的Charts页面,搜索rollout/ep_rew_mean(训练episode平均奖励)或eval/mean_reward(评估平均奖励),即可看到对应的奖励曲线。

内容的提问来源于stack exchange,提问作者Zackbord

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 10:26:04