【FreeRL】我的深度学习库构建思想
文章目录
- 前言
- 参考
- python环境
- 效果
- 已复现结果
- 综述
- DQN.py(主要)
- 算法实现
- 参数修改
- 细节实现
- 显示训练,保存训练
- Buffer.py
- evaluate.py
- learning_curves
前言
代码实现在:https://github.com/wild-firefox/FreeRL
欢迎star
参考
- 动手学强化学习
- elegentRL
- DRL-code-pytorch
- easy-rl
- maddpg-pettingzoo-pytorch
- 深度强化学习
- reinforcement-learning-algorithm
- DRL-Pytorch
- cleanRL
目的是写出像TD3作者那样简单易懂的DRL代码,
由于参考了ElegentRL和Easy的库,from easy to elegent 故起名为freeRL,
free也是希望写出的代码可以随意的,自由的从此代码移植到自己的代码上。
python环境
python 3.11.9
torch 2.3.1+cu121
gymnasium[all] 0.29.1
pygame 0.25.2 # 这个版本和gymnasium[all]0.29.1兼容
效果
在参数没有精细调整的情况下,在大多数的环境已能适用。
用DQN算法在LunarLander-v2环境下训练500个轮次的3个seed的效果:线为均值,阴影为方差

用 seed = 0 训练的模型评估,评估100个不同的seed的结果。

随机选择其中一个seed的结果,渲染环境。

已复现结果
1.DQN
2.DQN_Double
3.DQN_Dueling
4.DQN_PER
5.DQN_Noisy
6.DQN_N_Step
7.DQN_Categorical
8.DQN_Rainbow
其中:
1 实现在DQN_file/DQN.py
2-8 实现在DQN_file/DQN_with_tricks.py

综述
为了便于对算法的理解和改动,我将一个整体的算法训练和评估分离开来。
DQN_file
├── learning_curves
│ ├── env_name_1
│ │ ├── DQN_3_seed.npy
│ │ └── DQN.png
│ └── env_name_2
├── results
│ ├── env_name_1
│ │ ├── DQN_1
│ │ │ ├── DQN_seed_0.npy
│ │ │ ├── DQN.pt
│ │ │ ├── evaluate.gif
│ │ │ ├── evaluate.png
│ │ │ └── events.out.tfevents.
│ │ ├── DQN_2
│ │ └── DQN_3
│ └── env_name_2
├── plot_learning_curves.py
├── evaluate.py
├── Buffer.py
└── DQN.py
首先看最下面几个具体的py文件
1.evaluate.py 实现评估。
2.plot_learning_curves.py实现多个seed的学习曲线的绘制和算法比较。
3.DQN.py 实现算法。
4.Buffer.py 实现经验池,经验池基本通用。
以DQN.py为算法.py举例
DQN.py(主要)
建议边打开github上DQN.py的代码边看。
算法实现
一个深度强化学习算法分三个部分实现:
1.Agent类:包括actor、critic、target_actor、target_critic、actor_optimizer、critic_optimizer、
2.DQN算法类:包括select_action,learn、save、load等方法,为具体的算法细节实现
3.main函数:实例化DQN类,主要参数的设置,训练、测试、保存模型等
这三个部分均在DQN.py里实现。
参数修改
参数修改 改三处:
1.MLP的hidden (此参数往往在第一部分开头实现)
2.main中args
3.dis_to_con中的离散转连续空间维度(针对无法转成连续域的算法,例:DQN)
对于1.需要单独修改的理由
hidden的层数和个数容易变化,且RL的许多的算法创新实现在MLP(Qnet,Actor,Critic处)会有新增参数。
对于2.
args 为主要的参数,算法独有或共有或保存位置的修改。
对于3.
主要针对DQN只能对离散环境适用,不能对连续环境适用,进行的转换。
将动作分配成多维的离散动作,使得算法可以适用,相对的,在采样环境时,需要将离散的动作转换成连续的动作。
基本的参数没有精细调整,这里DQN使用离散环境MountainCar-v0为基准来调整参数,以此能收敛为目标了,后发现此参数可以适用大多数其他环境,但不是全部。
使用MountainCar-v0的理由:环境的目标是到达最高的山峰,但环境中还有个次高的山峰,个人认为可以很好拟合出梯度中的次优解。
细节实现
1.对于不同的算法的实现,在代码中给出论文链接和不同实现。
2.在RL中使用常用的,通用的pytorch代码,易懂。见:【深度强化学习】常常使用的pytorch代码
3.区分env的terminated,truncated
4.区分训练时用的action(例:(-1,1))和env能接受的action_(例:(-3,3))
(区分3,4两点对于收敛有很大帮助。)
5.区分环境采样过程和训练过程,以提高算法的拓展性。
6.以max_episodes为终止条件,但是训练以step为最小单位。
显示训练,保存训练
1.训练时,使用tensorboard来显示实时的学习曲率。
在DQN_file(算法)文件夹下,D:FreeRL/DQN_file 终端里输入:
tensorboard --logdir=results/env_name
在跳出的http://localhost:6008/ 按住ctrl点击进入就行。tensorboard保存的文件events.out.tfevents.和模型的位置一致。
保存模型的频率设置为总回合的1/4。
2.在results文件夹下,不同环境为文件夹名下,在算法(或算法+trick)为文件夹名里,(results/env_name/DQN_1)保存模型文件(DQN.pt)及其训练时每个episode的return值,以不同seed为区分(DQN_seed_0.npy)(此npy用于后续画学习曲率)
每进行一次训练文件夹后面的数DQN_n,n+1。
Buffer.py
在创建buffer时直接使用zeros来创建,比使用deque来创建在最后使用python基本数据再转成numpy再转成tensor速度要快。
这里使用numpy实现来使它更快一点。(参考elegentrl)

其他一些buffer的实现,都实现在此。
evaluate.py
实现对模型的评估,可设定评估的轮次数,设定是否保存渲染环境gif。
这里seed的设定值须与训练的seed值不同。
由于gymnasium可以设定env的seed。这里将环境的seed值设定为当前遍历的轮次,以实现seed的改变。
在gymnasium中,如果有实现任务所达到的return值,在画评估图时,以此为基线。环境gif的保存,则是随机挑选其中一个回合进行保存。
此代码所得到的evaluate.png,evaluate.gif均保存在模型所在位置。(results/env/DQN_1/下)
(上述效果的最后两个图)
learning_curves
1.将不同的results/env/algorithm_trick_n下的DQN_seed_n.npy绘制成一个学习曲线
以均值为线,阴影为方差。
2.将比较的多个seed的episode_return 另保存为DQN_3_seed.npy方便后续比较。
3.可以选择是否比较此算法的其他trick算法。
可以设置seed_num大小,取决于你在环境的测试中,实验了几次不同的seed大小,这里仅使用seed =
0,10,100来进行绘制,当然也可以只进行一个seed的绘制。(这里有进行平滑处理,可以设置)
生成的学习曲线图为DQN.py 和保存的DQN_3_seed.npy保存在learning_curves/env/下
(上述效果的第一张图为学习曲线图,已复现的结果为比较图)
相关文章:
【FreeRL】我的深度学习库构建思想
文章目录 前言参考python环境效果已复现结果 综述DQN.py(主要)算法实现参数修改细节实现显示训练,保存训练 Buffer.pyevaluate.pylearning_curves 前言 代码实现在:https://github.com/wild-firefox/FreeRL 欢迎star 参考 动手学强化学习e…...
Docker部署nginx容器无法访问80端口
问题说明 在阿里云ECS服务器上部署一台CentOS服务器,然后在里面安装了docker服务。用docker部署了nginx,开启docker中的nginx服务,映射宿主机端口80 把阿里云服务器上面的安全组放开了80端口 但是还是无法访问nginx的80web界面 问题分析 查…...
Python语言开发学习之使用Python预测天气
什么是wttr? 使用Python预测天气的第一步,我们要了解wttr是什么。wttr.in是一个面向控制台的天气预报服务,它支持各种信息表示方法,如面向终端的ANSI序列(用于控制台HTTP客户端(curl、httpie或wget))、HTML(用于web浏览器)或PNG(…...
minio实现大文件断点续传
最近工作中遇到一个需求,用户需要上传大文件几百M,为了更好的用户体验,需要支持断点续传,秒传,上传进度条等功能。需求如下: 方案有两种: 第一种:前端直接将整个大文件丢到后端&…...
Qt绘制动态仪表(模仿汽车仪表指针、故障灯)
背景: 项目需要,可能需要做一些仪表显示。此篇除了介绍实现方法,还要说明心路历程。对我而言,重要的是心理,而不是技术。写下来也是自勉。 本人起初心里是比较抵触的,从业20多年了,深知所谓界…...
【视频教程】GEE遥感云大数据在林业中的应用与典型案例实践
近年来遥感技术得到了突飞猛进的发展,航天、航空、临近空间等多遥感平台不断增加,数据的空间、时间、光谱分辨率不断提高,数据量猛增,遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇…...
【时时三省】c语言例题----华为机试题<字符串排序>
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 1,题目 HJ14 字符串排序 描述 给定 n 个字符串,请对 n 个字符串按照字典序排列。 数据范围: 1≤n≤1000 1≤n≤1000 ,字符串长度满足 1≤l…...
基于vue框架的城市体育运动交流平台15s43(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
系统程序文件列表 项目功能:用户,赛事类型,近期赛事,比赛报名,器材类型,器材信息,自由约战,运动队伍 开题报告内容 基于Vue框架的城市体育运动交流平台开题报告 一、项目背景与意义 随着城市化进程的加速和居民健康意识的提升,城市体育运动已成为现代…...
2024年软件测试经典大厂面试题(全3套)【包含答案】
前言 金三银四即将过去,后面迎来的便是金九银十,一直想着说分享一些软件测试的面试题,这段时间做了一些收集和整理,下面共有三篇经典面试题,大家可以试着做一下,答案附在后面,希望能帮助到大家。…...
What is Node.JS and its Pros and Cons
What is Node.JS and its Pros and Cons JavaScript is a client-side development tool. Node.js is a server-side development tool. And it’s only a runtime environment based on Chrome V8 so we don’t write some code in Node.js. Pros: JavaScript on a server …...
TestCraft - GPT支持的测试想法生成器和自动化测试生成器
在当今快速变化的软件开发世界中,自动化测试已成为确保软件质量的关键环节。而随着AI技术的进步,越来越多的工具开始引入人工智能,来辅助生成测试用例和自动化测试脚本。其中,TestCraft,作为一款GPT支持的测试想法生成…...
FreeRTOS内部机制学习04(任务通知和软件定时器)
文章目录 何为任务通知?任务通知使用例子任务通知的优势以及劣势优势劣势 深入源码看看API函数内部干了什么函数的种类函数都做了啥? 软件定时器软件定时器的作用软件定时器内部到底做了什么实现了“闹钟”功能引入守护任务,守护任务做了啥&a…...
华为eNSP :WLAN的配置
一、WLAN的知识点: VLAN配置: VLAN:可以想象成一个大房子(网络)里划分的不同房间(VLAN)。每个房间可以有自己的功能,比如一个用于睡觉(管理),另一…...
中国大数据产业的融资热潮来袭,哪些领域最受资本青睐?
大数据产业是以数据及数据所蕴含的信息价值为核心生产要素,通过数据技术、数据产品、数据服务等形式,使数据与信息价值在各行业经济活动中得到充分释放的赋能型产业。 基于启信产业大脑的海量数据与专业研判模型,本文将从产业图谱、区域分析…...
Unity数据持久化 之 使用Excel.DLL读写Excel表格
本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正 终于找到一个比较方便容易读表的方式了,以前用json读写excel转的cvs格式文件我怎么使用怎么别扭…...
Linux系统:chown命令
1、命令详解: chown命令用于设置文件所有者和文件关联组的命令,全称为change directory。在Linux当中默认文件均有拥有者,可以利用 chown 将指定文件的拥有者改为指定的用户或组,输入参数时用户可以是用户名或者用户 ID࿰…...
Unity3D ARPG(动作角色扮演游戏)设计与实现详解
动作角色扮演游戏(Action Role-Playing Game, ARPG)结合了传统角色扮演游戏(RPG)的深度与动作游戏(Action Game)的即时反应和流畅战斗体验。Unity3D 作为一款强大的跨平台游戏开发引擎,为开发者…...
Qt实现登录界面
本文基于Qt实现一个简单的登录界面,主要使用到Widget、button、edit等控件,基于自定义的信号槽实现界面的跳转,使用绘图设备添加背景图等。 1. 创建主界面 设计主界面的样式,并添加相关的控件。如下显示: 代码如下&…...
big.LITTLE
big.LITTLE 1 多核异构调度算法 http://www.linaro.org/?sbig.LITTLE http://git.linaro.org https://wiki.linaro.org/Archived%20LSK%20Versions big.LITTLE CPUs can be configured in 2 modes of operation: IKS – In Kernel Switcher (also known as CPU Migration…...
汤臣倍健,三七互娱,得物,顺丰,快手,游卡,oppo,康冠科技,途游游戏,埃科光电25秋招内推
汤臣倍健,三七互娱,得物,顺丰,快手,游卡,oppo,康冠科技,途游游戏,埃科光电25秋招内推 ①得物 【八大职类】技术、供应链、产品、运营、设计、职能、商品研究、风控等大类…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
