DRL模型训练:原始奖励函数记录以及绘制

news/2025/9/28 11:01:42/文章来源:https://www.cnblogs.com/sparkswll/p/19116304

一些参考图片:

image

image

1. 使用sb3库,

调用callback,会记录每个episode结束时的reward;

使用tensorboard记录的rollout/ep_rew_mean,会自动每4个ep平均,并进行平滑,得到的不是原始数据。

from stable_baselines3.common.callbacks import BaseCallback
import os
import numpy as np
class RewardLoggingCallback(BaseCallback):def __init__(self, save_path, verbose=0):super().__init__(verbose)self.save_path = save_pathself.episode_rewards = []def _on_step(self) -> bool:# SB3 会在 episode 结束时把 episode info 放在 infos 中if len(self.locals.get("infos", [])) > 0:for info in self.locals["infos"]:if "episode" in info.keys():self.episode_rewards.append(info["episode"]["r"])return Truedef _on_training_end(self) -> None:os.makedirs(os.path.dirname(self.save_path), exist_ok=True)np.save(self.save_path, np.array(self.episode_rewards))if self.verbose > 0:print(f"Saved episodic rewards to {self.save_path}")

2.调用seaborn库

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd# 假设你通过 callback 保存的数据是多个实验 run 的结果
# 例如保存成: run1_rewards.npy, run2_rewards.npy, ...
files = [
'run1_rewards.npy',
]# 定义滑动平均函数
def moving_average(x, window=50):return np.convolve(x, np.ones(window)/window, mode="valid")# 收集所有数据
data = []
for run_id, f in enumerate(files):rewards = np.load(f)smoothed = moving_average(rewards, window=20)for i, r in enumerate(smoothed):data.append({"timestep": i, "reward": r, "run": run_id})df = pd.DataFrame(data)# seaborn 绘制:均值曲线 + 阴影表示方差区间
plt.figure(figsize=(8, 5))
sns.lineplot(data=df,x="timestep",y="reward",hue=None,estimator="mean",errorbar="sd"  # 可选 "ci" 表示置信区间,"sd" 表示标准差
)plt.title("Episode Reward (Smoothed, Multiple Runs)")
plt.xlabel("Episode")
plt.ylabel("Reward")
plt.tight_layout()
plt.show()

参考

https://zhuanlan.zhihu.com/p/635706668
https://www.deeprlhub.com/d/114
https://zhuanlan.zhihu.com/p/75477750

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/920542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python的批量赋值语法

python的批量赋值语法 漫思

丽江市网站建设制作学校校园网网站建设预算

文章目录 1. 基于神经网络计算心理健康程度2. 添加激活函数的神经网络计算3. 使用神经网络预测小胖是否会变胖4. 激活函数选择的讨论5. 神经网络的设计6. 深度线性模型的表达能力线性模型7. 神经网络退化 主要讨论的内容 什么是人工神经网络,相关计算反向传播算法的…

泊头市网站建设价格百度网站排名 查询

JAVA代码编写 203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,4,5]示…

中国DevOps平台竞品分析:安全合规与技术生态的双重较量

中国DevOps平台竞品分析:安全合规与技术生态的双重较量 在数字化转型进入深水区的当下,DevOps平台作为企业研发效能的核心支撑,其选择直接关系到组织的创新效率和合规安全。2025年的中国市场上,Gitee、阿里云效和G…

experiment 1

实验目的会使用C语言程序开发环境(vs2010/devc++等),能熟练使用其编写、编译、运行、调试C程序 知道C程序结构和编码规范,能正确使用 能熟练使用C语言输入输出函数: scanf() , printf() , getchar() , putchar() …

做网站无锡单网页网站内容

在本机启动 http 服务,在你要下载文件的目录下输入 cmd ,运行 python -m http.server前提条件:本机安装了 python 服务。 查看本机 IP(无线局域网 IP),重新开一个窗口,查看本机 IP 地址。 ipc…

图领域的METIS算法介绍 - zhang

1. 算法来源 来源论文 论文题目: Partial Parallelization of Graph Partitioning Algorithm METIS 2. METIS算法 主要用于将大规模稀疏图高效划分为多个均衡子图,用于并行计算任务分配,VLS布局优化,有限元网络剖分…

【Double】浮点数:精确的小数计算

【Double】浮点数:精确的小数计算在编程中,浮点数(Double) 用于表示带小数点的数值。当我们需要进行精确的小数计算时,浮点数比整数更加适用。浮点数可以表示非常大或非常小的数值,并保持一定的精度。 一、 认识…

贵州高端建设网站特效视频素材网站

NPM NPM 的全称是 Node Package Manager,是随同 NodeJS 一起安装的包管理和分发工具,它很方便让 JavaScript 开发者下载、安装、上传以及管理已经安装的包。 官网 npm 官网:https://www.npmjs.com npm 命令 命令说明npm init初始化一个新的…

CANOpen safety SRDO相关问题总结

CANOpen PDO过程大家经常会使用,交互过程也比较熟悉,但是safety协议以及SRDO流程基本上都不是很熟悉,参考标准D301和D304 今天把最近研究SRDO的内容和现场调试的心得做一个总结

Prometheus源码专题【左扬精讲】—— 监控系统 Prometheus 3.4.0 源码解析:head_wal.go 的 WAL 写入策略与缓存管理源码解读

Prometheus源码专题【左扬精讲】—— 监控系统 Prometheus 3.4.0 源码解析:head_wal.go 的 WAL 写入策略与缓存管理源码解读

【Boolean】布尔值:逻辑判断的基础

【Boolean】布尔值:逻辑判断的基础在编程中,布尔值(Boolean) 是最简单的数据类型,只有两个可能的值:真($true) 或 假($false)。虽然简单,但布尔值在逻辑判断和程序流程控制中扮演着至关重要的角色。 一、 认…

电子通信词汇中英文对照

电子中英文对照中文 英文 举例说明符号还原 demangling 如c++filt

计算机考试模拟网站怎么做陕西有哪些公司是网站建设

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效…

从“手机拆修”看懂POD与非POD的区别 - 教程

从“手机拆修”看懂POD与非POD的区别 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &quo…

网天下信息技术有限公司网站上海家装公司排名

向已有ZIP中追加文件&#xff0c;使用qt自带的QZipWriter和quazip库均失败了&#xff0c;要么格式损坏、要么ZIP里面的原有的文件清空了 使用7z.exe可以实现 : 指令 7z.exe a A.zip B.txt&#xff0c;使用代码控制如下 #include <QCoreApplication> #include <QFile…

技术支持::天空网络-临汾做网站网站解析需要什么

“智能检测&#xff0c;精准把控。温湿度检测系统&#xff0c;为您的生活带来全方位的健康保障。”#非标协议项目【上】 前言预备知识1温湿度检测系统需求2.代码整合2.1找到编程实现LCD1602显示一行工程&#xff0c;打开代码文件&#xff0c;将所需的LCD1602驱动代码拷贝到温湿…

完整教程:【有源码】基于Hadoop+Spark的AI就业影响数据分析与可视化系统-AI驱动下的就业市场变迁数据分析与可视化研究-基于大数据的AI就业趋势分析可视化平台

完整教程:【有源码】基于Hadoop+Spark的AI就业影响数据分析与可视化系统-AI驱动下的就业市场变迁数据分析与可视化研究-基于大数据的AI就业趋势分析可视化平台pre { white-space: pre !important; word-wrap: normal …

Tomcat中启用h3的方法是什么

在Tomcat中启用HTTP/3(h3)需要使用一个支持QUIC和HTTP/3的连接器。目前,Tomcat还不支持原生的HTTP/3,但是可以使用QuicT,一个基于Java实现的QUIC连接器。 以下是在Tomcat中启用HTTP/3的步骤: 1. 下载QuicT连接器…

k8s-Namespace

Namespace 是k8s中做用户隔离的,适用于多租户的场景。 Namespace 是 Kubernetes 用于实现资源逻辑隔离、多租户、安全授权和环境区分的重要机制,是大规模集群必备的组织手段。Namespace 是什么? Namespace 是 Kuber…