import copy import ray from ray import tune from egpo_utils.cql.cql import CQLTrainer from egpo_utils.common import evaluation_config, ILCallBack, CQLInputReader from egpo_utils.expert_guided_env import ExpertGuidedEnv from egpo_utils.train import get_train_parser from egpo_utils.train.train import train import os data_set_file_path = os.path.join(os.path.dirname(__file__), 'expert_traj_500.json') def get_data_sampler_func(ioctx): return CQLInputReader(data_set_file_path) eval_config = copy.deepcopy(evaluation_config) eval_config["input"] = "sampler" # important to use pgdrive online evaluation eval_config["env_config"]["random_spawn"] = True if __name__ == '__main__': print(data_set_file_path) try: file = open(data_set_file_path) except FileNotFoundError: raise FileExistsError("Please collect dataset by using collect_dataset.py at first") assert ray.__version__ == "1.3.0" or ray.__version__ == "1.2.0", "ray 1.3.0 is required" args = get_train_parser().parse_args() exp_name = "CQL" or args.exp_name stop = {"timesteps_total": 100_0000_00000} config = dict( # ===== Evaluation ===== env=ExpertGuidedEnv, env_config=evaluation_config["env_config"], input_evaluation=["simulation"], evaluation_interval=1, evaluation_num_episodes=30, evaluation_config=eval_config, evaluation_num_workers=2, metrics_smoothing_episodes=20, # ===== Training ===== # cql para lagrangian=False, # Automatic temperature (alpha prime) control temperature=5, # alpha prime in paper, 5 is best in pgdrive min_q_weight=0.2, # best bc_iters=20_0000, # bc_iters > 20_0000 has no obvious improvement # offline setting no_done_at_end=True, input=get_data_sampler_func, optimization=dict(actor_learning_rate=1e-4, critic_learning_rate=1e-4, entropy_learning_rate=1e-4), rollout_fragment_length=200, prioritized_replay=False, horizon=2000, target_network_update_freq=1, timesteps_per_iteration=1000, learning_starts=10000, clip_actions=False, normalize_actions=True, num_cpus_for_driver=0.5, # No extra worker used for learning. But this config impact the evaluation workers. num_cpus_per_worker=0.1, # num_gpus_per_worker=0.1 if args.num_gpus != 0 else 0, num_gpus=0.2 if args.num_gpus != 0 else 0, framework="torch" ) train( CQLTrainer, exp_name=exp_name, keep_checkpoints_num=5, stop=stop, config=config, num_gpus=args.num_gpus, # num_seeds=2, num_seeds=5, custom_callback=ILCallBack, # test_mode=True, # local_mode=True ) 运行结果怎么可视化
时间: 2025-04-05 09:14:29 浏览: 39
<think>好的,我现在需要帮助用户解决关于如何可视化他们运行的强化学习代码的结果的问题。首先,我得仔细看看用户提供的代码,了解他们使用的框架和工具。看起来他们用的是Ray的Tune库和CQLTrainer,可能是在训练一个保守Q学习(CQL)的模型,环境是ExpertGuidedEnv,可能和自动驾驶模拟相关,比如PGDrive。
用户的问题是运行结果如何可视化。我需要回忆一下Ray Tune通常如何处理结果输出和可视化。通常,Ray Tune在训练过程中会输出一些日志,包括指标如episode_reward_mean等。这些日志可以存储在不同的地方,比如TensorBoard、CSV文件,或者通过Ray自带的日志系统。
接下来,我需要考虑用户可能的可视化需求。通常,强化学习的训练过程可视化包括奖励曲线、Q值变化、策略损失等。用户可能想看到训练过程中这些指标的变化趋势,或者评估阶段的性能表现。此外,他们可能还想在环境中观察训练后的策略的实际表现,比如生成视频或实时渲染。
首先,我应该检查代码中是否有配置日志记录的部分。在用户提供的配置字典里,我注意到有evaluation相关的设置,比如evaluation_interval和evaluation_num_episodes。这说明在训练过程中会定期进行评估,并生成评估指标。这些评估结果应该会被记录下来,但用户可能需要知道如何访问这些数据。
然后,用户可能已经使用了TensorBoard,因为Ray Tune默认集成TensorBoard。需要确认代码中是否指定了log目录,并指导用户如何使用TensorBoard查看。例如,训练脚本可能会将结果保存在某个目录下,用户可以通过运行tensorboard --logdir=~/ray_results来查看。
另外,用户代码中的train函数可能来自egpo_utils库,这个库可能有一些自定义的回调或日志处理。比如,代码中使用了ILCallBack作为custom_callback,这个回调可能处理了一些日志记录或保存检查点的逻辑。需要查看ILCallBack的文档或源代码,看它是否生成了额外的日志文件或可视化数据。
此外,用户的数据集路径是expert_traj_500.json,可能涉及到专家轨迹的加载。在训练过程中,可能比较了学习策略与专家策略的表现,这部分的可视化可能需要对比两者的奖励或其他指标。
考虑到用户可能不太熟悉Ray Tune的可视化工具,我应该分步骤说明几种常见的可视化方法:
1. 使用TensorBoard:Ray Tune默认会将结果输出到TensorBoard,用户只需要运行TensorBoard并指向日志目录即可。需要指出日志的可能路径,如~/ray_results/exp_name。
2. 分析CSV日志:Ray Tune也会生成progress.csv和result.json等文件,用户可以用Pandas读取这些文件,并用Matplotlib或Seaborn绘制曲线图。例如,读取episode_reward_mean随时间步的变化。
3. 检查评估结果:代码中配置了评估间隔和评估次数,评估结果可能包含在日志中,用户需要提取这些数据并可视化。
4. 环境渲染:如果环境支持渲染,可能在评估时生成视频。需要检查ExpertGuidedEnv是否有渲染功能,并在配置中启用,比如设置record_env参数或使用环境特定的渲染方法。
另外,用户可能需要自定义可视化,比如比较不同种子的训练结果,或者查看特定超参数下的表现。这时候可能需要更详细的数据处理和绘图步骤。
还需要注意用户代码中的一些配置项,比如metrics_smoothing_episodes=20,这可能会影响指标的平滑处理,在可视化时需要注意是否使用平滑后的数据。
最后,用户可能在运行代码时遇到问题,比如没有正确安装TensorBoard,或者日志目录不正确,需要提醒用户检查这些方面。另外,如果用户希望实时监控训练进度,Ray Tune也提供了CLI工具或状态输出,可以查看训练过程中的实时指标。
总结一下,我需要分步骤说明如何通过TensorBoard、CSV文件分析、环境渲染等方法进行可视化,并给出具体的代码示例和命令行指令,确保用户能够逐步操作。同时,需要指出可能需要注意的配置项和常见问题,帮助用户顺利实现结果的可视化。</think>以下是针对该强化学习训练结果可视化的分步说明:
==================
强化学习训练可视化步骤
==================
1. TensorBoard 可视化(推荐方法)
```bash
# 安装依赖
pip install tensorboard
# 启动TensorBoard(路径根据实际训练输出调整)
tensorboard --logdir=~/ray_results/CQL
```
- 访问 localhost:6006 查看以下关键指标:
* `episode_reward_mean` (平均回合奖励)
* `evaluation/custom_metrics` (评估指标)
* `policy_learning_rate` (策略网络学习率变化)
* `td_error` (时序差分误差)
2. CSV 数据分析可视化(适合深度分析)
```python
import pandas as pd
import matplotlib.pyplot as plt
# 读取训练日志
df = pd.read_csv("~/ray_results/CQL/experiment_state-2023-XX-XX.csv")
# 绘制奖励曲线
plt.figure(figsize=(10,6))
plt.plot(df['timesteps_total'], df['episode_reward_mean'], label='训练奖励')
plt.plot(df['timesteps_total'], df['evaluation/episode_reward_mean'], label='评估奖励')
plt.xlabel('环境步数')
plt.ylabel('平均奖励')
plt.legend()
plt.show()
```
3. 策略行为可视化(需要环境支持)
在配置中添加渲染参数:
```python
eval_config["env_config"]["render_mode"] = "rgb_array" # 启用图像渲染
eval_config["record_env"] = True # 记录视频
```
4. 关键指标监控清单:
| 指标名称 | 健康范围 | 监控频率 |
|---------------------------|----------------|------------|
| evaluation/episode_reward | 持续上升趋势 | 每1次评估 |
| td_error | < 10.0 | 实时监控 |
| policy_entropy | 0.5-2.0 | 每5k步 |
5. 常见问题排查:
- 问题:TensorBoard无数据显示
▶ 检查日志路径是否正确
▶ 确认训练至少完成1次评估周期
- 问题:评估奖励不增长
▶ 检查`temperature`参数设置(当前值5.0)
▶ 验证`min_q_weight=0.2`是否合适
6. 高级分析建议:
```python
# 多实验对比
from ray.tune.analysis import ExperimentAnalysis
analysis = ExperimentAnalysis("~/ray_results/*")
analysis.dataframe.plot(x="timesteps_total", y="episode_reward_mean")
```
注:该代码中使用的CQL算法会生成两个关键曲线:
- 离线数据集Q值分布
- 学习策略Q值估计
建议使用`seaborn`库的kdeplot进行概率密度可视化对比
建议定期检查`~/ray_results/CQL`目录下的checkpoint文件,可使用`CQLTrainer.restore()`加载模型进行策略可视化验证。
阅读全文
相关推荐















