强化学习路线规划之深度强化学习代码

news2024/11/27 2:47:31

虽然说很多代码都有问题,但是不管它们,我不是为了去debug,紧盯住自己的目标,目标是整理出一条通常的强化学习之路,让自己以及看到这些博客的大家在学习的时候能够少走一些弯路。所以从q-learning和Sarsa开始,这些基础代码不需要借助框架,所以没什么太大问题。但是深度学习的话就要借助TensorFlow或者pytorch框架,而这两个框架都分别出了两个版本,就导致前后的兼容性较差,前人的经验工作无法得到有效的利用。

Deep-Reiforcement-Learning之debug旅程

我找了许多的学习代码,但是很多经常不能使用,但是我也花费了许多功夫,所以现在我想直接把对这些代码的debug过程记录下来。好了,话不多说,下面看着这么多的代码,又有几个能用的呢?测试一下吧

在这里插入图片描述
果不其然,运行code6-2

C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\gym\envs\registration.py:556: UserWarning: WARN: The environment CartPole-v0 is out of date. You should consider upgrading to version `v1`.
  f"The environment {id} is out of date. You should consider "
C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\numpy\lib\shape_base.py:591: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.
  a = asanyarray(a)
Traceback (most recent call last):
  File "C:/Python program/Deep-Reiforcement-Learning-main/code/Code6/code6-2 DQN-2015算法求解倒立摆问题代码.py", line 220, in <module>
    agent.train()                   #训练智能体
  File "C:/Python program/Deep-Reiforcement-Learning-main/code/Code6/code6-2 DQN-2015算法求解倒立摆问题代码.py", line 145, in train
    action = self.egreedy_action(state) 
  File "C:/Python program/Deep-Reiforcement-Learning-main/code/Code6/code6-2 DQN-2015算法求解倒立摆问题代码.py", line 70, in egreedy_action
    state = torch.from_numpy(np.expand_dims(state,0))
TypeError: can't convert np.ndarray of type numpy.object_. The only supported types are: float64, float32, float16, complex64, complex128, int64, int32, int16, int8, uint8, and bool.

大概就是环境不对,好,改成v1
再运行

C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\numpy\lib\shape_base.py:591: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.
  a = asanyarray(a)
Traceback (most recent call last):
  File "C:/Python program/Deep-Reiforcement-Learning-main/code/Code6/code6-2 DQN-2015算法求解倒立摆问题代码.py", line 220, in <module>
    agent.train()                   #训练智能体
  File "C:/Python program/Deep-Reiforcement-Learning-main/code/Code6/code6-2 DQN-2015算法求解倒立摆问题代码.py", line 145, in train
    action = self.egreedy_action(state) 
  File "C:/Python program/Deep-Reiforcement-Learning-main/code/Code6/code6-2 DQN-2015算法求解倒立摆问题代码.py", line 70, in egreedy_action
    state = torch.from_numpy(np.expand_dims(state,0))
TypeError: can't convert np.ndarray of type numpy.object_. The only supported types are: float64, float32, float16, complex64, complex128, int64, int32, int16, int8, uint8, and bool.

Process finished with exit code 1

依然错误,好我再修改

state = torch.from_numpy(np.expand_dims(state, 0)).float()

然后运行,还是错误
然后运行其他的代码,也没有一个能跑的,算了

Reinforcement-learning-with-tensorflow代码debug之旅

差点忘了,这个前几天刚debug过,里面深度强化学习的代码基本上都由于版本问题无法跑起来,放弃

pytorch-tutorial代码debug之旅,这个代码看起来也挺全的,但是就不知道能不能跑

在这里插入图片描述
太好了,终于遇见一个能打的了,也感恩pytorch,TensorFlow实在是非常坑,我是一百个不愿意用它

作图,matplotlib的使用

import torch
import torch.nn.functional as F
from torch.autograd import Variable
import matplotlib.pyplot as plt

x=torch.linspace(-5,5,200)
x=Variable(x)
x_np=x.data.numpy()

y_relu=torch.relu(x).data.numpy()
y_sigmoid=torch.sigmoid(x).data.numpy()
y_tanh=torch.tanh(x).data.numpy()
y_softplus=F.softplus(x).data.numpy()

#画图
plt.figure(1,figsize=(8,6))

plt.subplot(221)
plt.plot(x_np,y_relu,c='red',label='relu')
plt.ylim((-1,5))
plt.legend(loc='best')

plt.subplot(222)
plt.plot(x_np,y_sigmoid,c='red',label='relu')
plt.ylim((-0.2,1.2))
plt.legend(loc='best')

plt.subplot(223)
plt.plot(x_np,y_tanh,c='red',label='tanh')
plt.ylim((-1.2,1.2))
plt.legend(loc='best')

plt.subplot(224)
plt.plot(x_np,y_softplus,c='red',label='softmax')
plt.ylim((-0.2,6))
plt.legend(loc='best')

plt.show()

在这里插入图片描述
神经网络还必须得GPU才能跑


import torch
import torch.nn.functional as F
import matplotlib.pyplot as plt
from torch.utils.tensorboard import SummaryWriter
import os
log_dirs="logs/regre"
writer=SummaryWriter(log_dir=log_dirs)
x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1)  # x data (tensor), shape=(100, 1)
y = x.pow(2) + 0.2*torch.rand(x.size())                 # noisy y data (tensor), shape=(100, 1)

class Net(torch.nn.Module):
    def __init__(self, n_feature, n_hidden, n_output):
        super(Net, self).__init__()
        self.hidden = torch.nn.Linear(n_feature, n_hidden)   # hidden layer
        self.predict = torch.nn.Linear(n_hidden, n_output)   # output layer

    def forward(self, x):
        x = F.relu(self.hidden(x))      # activation function for hidden layer
        x = self.predict(x)             # linear output
        return x

net = Net(n_feature=1, n_hidden=10, n_output=1)     # define the network
print(net)  # net architecture

optimizer = torch.optim.SGD(net.parameters(), lr=0.2)
loss_func = torch.nn.MSELoss()  # this is for regression mean squared loss

plt.ion()   # something about plotting

for t in range(200):
    prediction = net(x)     # input x and predict based on x

    loss = loss_func(prediction, y)     # must be (1. nn output, 2. target)

    optimizer.zero_grad()   # clear gradients for next train
    loss.backward()         # backpropagation, compute gradients
    optimizer.step()        # apply gradients
    writer.add_scalar("Loss",loss)

    if t % 5 == 0:
        # plot and show learning process
        plt.cla()
        plt.scatter(x.data.numpy(), y.data.numpy())
        plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5)
        plt.text(0.5, 0, 'Loss=%.4f' % loss.data.numpy(), fontdict={'size': 20, 'color':  'red'})
        plt.pause(0.1)

writer.close()
plt.ioff()
plt.show()

上面是一个用神经网络的回归代码,我又添加了tensorboard查看网络的代码,结果如下:
在这里插入图片描述
pytorch中使用tensorboard的方法
1.导入所需的库:

from torch.utils.tensorboard import SummaryWriter

2.创建一个SummaryWriter对象:

writer = SummaryWriter()

3.在训练过程中,将需要记录的指标(例如损失、准确率等)写入到SummaryWriter对象中:

# 在训练循环中,例如每个epoch或每个iteration
writer.add_scalar('Loss', loss, global_step)
writer.add_scalar('Accuracy', accuracy, global_step)

4.在训练完成后,关闭SummaryWriter对象:

writer.close()

5.启动TensorBoard服务器:
在终端中,使用以下命令在指定的目录中启动TensorBoard服务器:

tensorboard --logdir=logs

6.在浏览器中查看TensorBoard的可视化结果:
打开浏览器,访问TensorBoard服务器的地址(默认是http://localhost:6006),即可查看训练过程和模型性能的可视化结果。

logs是一个目录路径,你可以在你的代码中自行定义。它用于存储TensorBoard日志文件和事件文件,供TensorBoard服务器读取并进行可视化。

通常,你可以将logs目录定义为你项目的根目录下的一个子目录,或者在任意合适的位置创建一个新的目录。在定义logs路径时,你可以使用绝对路径或相对路径。

以下是一个示例,将logs目录定义为项目根目录下的子目录:

logs_dir = os.path.join(os.getcwd(), 'logs')
writer = SummaryWriter(log_dir=logs_dir)

OK了

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

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

相关文章

buuctf9

目录 web [ZJCTF 2019]NiZhuanSiWei misc [BJDCTF2020]认真你就输了 刷新过的图片 crypto 篱笆墙的影子 RSA web [ZJCTF 2019]NiZhuanSiWei 1.启动环境 <?php $text $_GET["text"]; $file $_GET["file"]; $password $_GET["password…

UE4与MATLAB联合仿真环境配置中遇到的问题及解决办法

UE4与MATLAB联合仿真环境配置中遇到的问题及解决办法 目录 UE4与MATLAB联合仿真环境配置中遇到的问题及解决办法前言问题及解决办法1. The following modules are missing or built with a different engine version: MathWorksAerospace MathWorksSimulation MathWorksUAV Eng…

IMX6Ull内核移植详细过程讲解

文章目录 一、安装相应依赖包二、下载相应的内核版本库&#xff08;1&#xff09;讲解官网内核分支&#xff08;2&#xff09;下载内核版本库&#xff08;3&#xff09;内核目录文件讲解 三、开始内核移植过程&#xff08;1&#xff09;步骤一、修改默认架构和默认交叉编译器&a…

modbus协议与nodejs modbus-serial实现

nodejs可通过modbus-serial库来实现modbus协议 npm install modbus-srial 安装完后在examples目录下有例子说明如何使用&#xff0c;本文主要讲述作为客户端的使用方式。 polling_RTU是使用485串口来实现modbus通信&#xff0c; polling_TCP和 polling_UDP则使用TCP/UDP来实现…

HBuilderX使用

HBuilderX使用&#xff08;Vue前后端分离&#xff09; 概述&#xff1a;DCloud开发者后台 DAccount Service 1、官网下载开发工具&#xff1a;HBuilderX-高效极客技巧 注意&#xff1a;安装目录路径中不能出现中文特殊字符&#xff0c;否则会造成项目无法编译。比如C:/Progr…

learn_C_deep_10 深刻认识C语言重点操作符

目录 注释符号 其他注释方法 注释建议 接续符和转义符 在续行符\之前或者之后带上空格&#xff0c;行不行&#xff1f; \n&#xff1a;换行符与\r&#xff1a;回车符之间的区别 两个小程序(旋转光标、倒计时) 单引号和双引号 ​编辑abcd这样写有问题吗? 特殊情况 为…

ThinkPHP6表单上传的数据获取的四种方式【请求对象调用,静态调用,助手函数调用,原生的get|post】

ThinkPHP6表单上传的数据获取 首先一个form表单中的Input控件需要存在对应的name值&#xff0c;然后method为post|get,action为要提交到的控制器的哪个方法 例如(本文的前端视图代码均为下面的html)&#xff1a; <form method"post" action"/index.php/lo…

Hard Patches Mining for Masked Image Modeling

摘要 蒙面图像建模&#xff08;MIM&#xff09;因其在学习可伸缩视觉表示方面的潜力而引起了广泛的研究关注。在典型的方法中&#xff0c;模型通常侧重于预测掩码补丁的特定内容&#xff0c;并且它们的性能与预定义的掩码策略高度相关。直观地说&#xff0c;这个过程可以被看作…

应用架构总结

架构目标 高可用性 整体系统可用性最低99.9%&#xff0c;目标99.99%。全年故障时间整个系统不超过500分钟&#xff0c;单个系统故障不超过50分钟。 高可扩展性 系统架构简单清晰&#xff0c;应用系统间耦合低&#xff0c;容易水平扩展&#xff0c;业务功能增改方便快捷。 低成…

IOS APP universal links 申请流程

一、背景 项目框架&#xff1a;APP h5 需求&#xff1a;APP首页可以选择微信&#xff0c;进行授权登录。 问题&#xff1a;在APP跳转到微信进行授权的时候&#xff0c;提示“由于应用universal link校验不通过&#xff0c;无法完成微信登录”。 二、申请流程 1. 苹果后台管…

XML语言简介和语法介绍

XML语言简介 文章目录 XML语言简介用途各部分注解声明元素属性注释CDATA转义字符 可拓展标记语言&#xff1b;是SGML的子集&#xff0c;可以描述很复杂的数据关系 用途 用于组织和存储数据&#xff0c;除此之外都和XML本身无关 配置文件(例子&#xff1a;Tomcat的web.xml,se…

Android 消息机制

消息机制相关API Message(消息) 可理解为线程之间通讯的数据单元, 可以通过message携带需要的数据 创建对象: Message.obtain(what) 封装数据 public int what public int arg public Object obj Handler(处理器) Handler是Message的处理器, 同时也负责消息的发送和移除的…

Linux内核(十四)Input 子系统详解 IV —— 配对的input设备与input事件处理器 input_register_handle

文章目录 input_handle结构体详解配对的input设备与input事件处理器实例input核心层对驱动层和事件层之间的框架建立流程图 本文章中与input子系统相关的结构体可参考input子系统结构体解析 input函数路径&#xff1a;drivers/input/input.c input_handle结构体详解 input_ha…

二十六:交易详细信息

功能需求 用户在交易主页面&#xff0c;点击交易名称超级链接&#xff0c;跳转到交易明细页面&#xff0c;完成查看交易明细的功能。 *显示交易的基本信息 *显示交易的备注信息 *显示交易的历史信息 *显示交易的阶段图标信息 流程图 后端代码实现 1.tran TranMapper /*…

实现Fast sigmoid和Softmax

Sigmoid 函数介绍 Sigmoid 函数&#xff08;Logistic 函数&#xff09;是神经网络中非常常用的激活函数&#xff0c;它的数学表示如下: 由于 e x e^x ex幂运算是非常耗时的计算&#xff0c;因此尝试通过替换sigmoid中的 e x e^x ex运算&#xff0c;来提高运行效率&#xff0c;同…

Linux篇4

Shell常用命令 1. 日期时间类1.1 date&#xff1a;日期时间类1.1.1 查看当前日期时间1.1.2 查看非当前日期时间1.1.3 设置系统日期时间 1.2 cal&#xff1a;日历类 2. 用户管理命令2.0 id&#xff1a;查看用户是否存在2.1 useradd&#xff1a;添加新用户2.2 passwd&#xff1a;…

Linux相关问题

中英文切换 super空格切换中英文&#xff1b;super指键盘上的Win键&#xff1b; 开机自启动服务设置 可视化方式&#xff1a;输入setup命令进入自启动服务配置&#xff1b;通过上下键选中服务&#xff0c;通过空格选择是否自启动该服务&#xff1b; 开启不同的终端 CTRLALT…

Jetson nano 之 ROS入门 - - 机器人坐标变换

文章目录 前言一、空间坐标变换原理1. 位姿描述2. 欧拉角与四元数 二、ROS中python实现坐标变换1. 坐标msg消息载体2. 乌龟跟随的程序实现 总结 前言 ROS给开发者们提供了很多集成度很高的开发工具&#xff0c;例如rviz和gazebo。rviz是三维可视化工具&#xff0c;可以显示图像…

【P23】JMeter 用户参数(User Parameters)

&#xff08;1&#xff09;、测试计划右键 <<< 添加 <<< 前置处理器 <<< 用户参数 如图&#xff0c;添加两个变量&#xff0c;每个变量包含两个用户 &#xff08;2&#xff09;、测试计划右键 <<< 添加 <<< 线程&#xff08;用户…

ChatGPT的工作原理(纯干货,万字长文)

ChatGPT 能够自动生成一些读起来表面上甚至像人写的文字的东西&#xff0c;这非常了不起&#xff0c;而且出乎意料。但它是如何做到的&#xff1f;为什么它能发挥作用&#xff1f;我在这里的目的是大致介绍一下 ChatGPT 内部的情况&#xff0c;然后探讨一下为什么它能很好地生成…