强化学习鱼书(7)——神经网络和Q学习

代码地址

书内附代码地址
https://github.com/oreilly-japan/deep-learning-from-scratch-4

环境搭建

0.建立虚拟环境

conda create -n env_test python=3.10
conda activate env_test

1.安装cuda
50系的显卡只支持torch的nightly+cuda12.8版本,别的版本会显示no kernel问题

pip install --upgrade --pre torch torchvision --index-url \ https://download.pytorch.org/whl/nightly/cu128

2.安装Dezero
直接从github上拉<深度学习从零开始3项目>的代码,批量安装依赖
深度学习从零开始3项目

pip install .#测试代码
import numpy as np
from dezero import Variable
x_np = np.array(5.0)
x = Variable(x_np)
y = 3 * x ** 2
print(y)		#输出variable(75.0)

线性回归

梯度表示在每个点上函数输出增加最快的方向。反过来说,梯度乘以-1得到的方向就是y值减少最快的方向。因此,如果重复进行沿着梯度的方向前进某个距离 、在新的地点再次求出梯度 ,我们就有望慢慢接近目标位置(最大值或最小值 )。这就是梯度下降法

import numpy as np
from dezero import Variable
import dezero.functions as F
#玩具数据集
np.random.seed(0)
x = np.random.rand(100, 1)	#生成 100 行 1 列的二维数组,区间[0,1)
y=5+2*x+ np.random.rand(100, 1)
x, y = Variable(x), Variable(y)
W = Variable(np.zeros((1, 1)))
b = Variable(np.zeros(1))def predict(x):y = F.matmul(x, W) + breturn ydef mean_squared_error(x0, xl):diff = x0 - xlreturn F.sum(diff ** 2) / len(diff)lr = 0.1
iters = 100
for i in range(iters):y_pred = predict(x)loss = mean_squared_error(y, y_pred)	#实际y和y=Wx+b的误差W.cleargrad()b.cleargrad()loss.backward()W.data -= lr * W.grad.datab.data -= lr * b.grad.data		#求(W,b)的梯度if i % 10 == 0: print(loss.data)

损失函数:在这里插入图片描述

神经网络

进行非线性变换的函数叫作“激活函数”。典型的神经网络会交替使用线性变换和激活函数。

#参数的初始化
I,H,O = 1, 10, 1  #分别为Input维度,Hidden层维度,Output维度
W1 = Variable(0.01 * np.random.randn(I, H))
b1 = Variable(np.zeros(H))
W2 = Variable(0.01 + np.random.randn(H, O))
b2 = Variable(np.zeros(0))#推理
def predict(x):y = F.linear(x, W1, b1)y = F.sigmoid(y)y = F.linear(y, W2, b2)return y#训练
for i in range(iters):ypred = predict(x)loss = F.mean squared error(y, ypred)Wl.cleargrad()bl.cleargrad()W2.cleargrad()b2.cleargrad()loss.backward()W1.data -= lr * W1.grad.datab1.data -= lr * b1.grad.dataW2.data -= lr * W2.grad.datab2.data -= lr * b2.grad.dataif i % 1000 == 0:print(loss.data)

也可以使用Linear类进行线性变换。权重和偏置在linear实例内部,我们可以通过linear.W和linear.b访问它们。另外,也可以通过linear.params访问所有参数。
在这里插入图片描述
通过继承Model类可以实现模型,并自定义层的组合来构建神经网络。可以通过model.params()依次访问所有参数。
下面的forward即为推理过程,实现predict(x)一样的效果
在这里插入图片描述
因此实际训练过程可以优化成:
在这里插入图片描述
可以使用from dezero import optimizers导入optimizers包,optimizers包中有多种最优化方法。(比如随机梯度下降)。上述代码可更新成
在这里插入图片描述

Q学习和神经网络

3X4的网格问题,状态将智能代理的位置以(y,x)这样的数据格式表示
在这里插入图片描述
按照从左到右、上到下编号,所以(y,x)=(0,3)=3,idx=4*y+x把[3,4]的矩阵转成[1,12]的矩阵——one-hot
在这里插入图片描述
只将“状态”作为输入,输出多个(数量为action个数)Q函数值
在这里插入图片描述
在这里插入图片描述

1. 建立神经网络模型:输入s,输出Q

建立模型qnet,比如我们的模型是linear+relu+linear——用来计算Q值
在这里插入图片描述

2.get_action:St进行At

在这里插入图片描述
get_action方法基于e-greedy选择行动。也就是说,它会以e的概率选择随机的行动,否则就选择Q函数值最大的行动
在这里插入图片描述

3.update:更新Qt

监督学习不需要与正确答案标签相关的梯度,因此我们使用next_q.unchain()将next_q排除在反向传
播之外(unchain的意思是"解链")。

nextq = nextqs.max(axis=1)这一句的意思是St+1 —Qt+1(MAX)— At+1的过程,也就是下面的图
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

数据建模与分析:从回归预测到特征聚类的全面探索(PyTorch)

文章目录 简介&#xff1a;数据建模简介回归分析回归分析简介回归分析建模判定系数估计标准差住房价格回归预测 聚类聚类简介聚类分析建模植物花卉特征聚类 主成分分析&#xff08;PCA&#xff09;主成分分析简介成分分析建模地区竞争力指标降维 简介&#xff1a; 在现代数据科…

uv 包管理工具使用教程

一、简介 uv 是一个基于 Rust 实现的超快 Python 包管理工具&#xff0c;旨在加速 Python 开发流程。它是 pip、pip-tools、virtualenv 和 venv 的现代替代品&#xff0c;支持更快的包解析、安装和虚拟环境创建。 主要特性包括&#xff1a; 极快的依赖解析与安装 自动创建和…

5分钟应急响应+99%达标率:AI智能监控重塑商业清洁新标准

一、方案整体架构 面对商业综合体日均10万客流量带来的管理挑战&#xff0c;传统保洁模式在人员监管、质量评估和应急响应方面存在显著瓶颈。本系统以全场景AI监控为核心&#xff0c;构建三级智能化管理体系&#xff1a; 1. 前端感知层&#xff1a;部署800万像素广角摄像…

裸金属服务器:解锁极致性能,拒绝虚拟化开销!

什么是裸金属服务器&#xff1f; 裸金属服务器&#xff08;Bare Metal Server&#xff09;是一种介于物理服务器和云服务器之间的新型计算服务形态。它既具备传统物理服务器的性能优势&#xff0c;又拥有云服务器的灵活性和便捷管理特性。与虚拟化云服务器不同&#xff0c;裸金…

[论文精读]Ward: Provable RAG Dataset Inference via LLM Watermarks

Ward: Provable RAG Dataset Inference via LLM Watermarks [2410.03537] Ward: Provable RAG Dataset Inference via LLM Watermarks ICLR 2025 Rebuttal&#xff1a;Ward: 可证明的 RAG 数据集推理通过 LLM 水印 | OpenReview --- Ward: Provable RAG Dataset Inference v…

【ffmpeg】ffprobe基本用法

ffprobe 是 FFmpeg 工具集中的一个强大命令行工具&#xff0c;主要用于分析多媒体文件&#xff08;如视频、音频等&#xff09;的格式和内容信息。它可以提取文件的元数据、编解码器信息、流详情、帧信息等&#xff0c;而无需对文件进行转码或修改。 基本用法 ffprobe [选项] …

有哪些GIF图片转换的开源工具

以下是关于GIF图片转换的开源工具的详细总结,涵盖功能特点、适用场景及用户评价: 1. FFmpeg 功能特点: 作为开源命令行工具,FFmpeg支持视频转GIF、调整帧率、分辨率、截取片段等操作,可通过脚本批量处理。适用场景: 适合开发者或技术用户进行高效批处理,常用于服务器端自…

js不同浏览器标签页、窗口或 iframe 之间可以相互通信

一、创建一个广播通道 // 创建一个名为 vue-apps-channel 的广播通道 const channel new BroadcastChannel(vue-apps-channel);二、发送消息 channel.postMessage({type: popup, message: false}); 三、接收消息&#xff08;也需要创建广播通道&#xff09; // 也创建一个…

【算法笔记day two】滑动窗口(不定长版)

前言 hello大家好&#xff0c;本期文章紧接着上期&#xff0c;讲述滑窗的下一个大分类——不定长。 定长滑窗请看我上期文章&#xff0c;有详细介绍。温馨提醒&#xff0c;代码大部分为手搓&#xff0c;答案方法不唯一。如果想要优雅的版本可以去找其他题解&#xff0c;我的…

Node.js Express 项目现代化打包部署全指南

Node.js Express 项目现代化打包部署全指南 一、项目准备阶段 1.1 依赖管理优化 # 生产依赖安装&#xff08;示例&#xff09; npm install express mongoose dotenv compression helmet# 开发依赖安装 npm install nodemon eslint types/node --save-dev1.2 环境变量配置 /…

Linux电源管理——PSCI初始化流程和多核启动流程

目录 一、PSCI 初始化流程 1、PSCI设备树节点 2、PSCI kernel初始化流程 get_set_conduit_method set_conduit psci_probe 二、CPU PSCI 操作初始化流程 1、CPU 设备树节点 2、 struct cpu_operations 3、kernel 流程 cpu_read_bootcpu_ops smp_init_cpus 三、CPU…

【Nginx学习笔记】:Fastapi服务部署单机Nginx配置说明

服务部署单机Nginx配置说明 服务.conf配置文件&#xff1a; upstream asr_backend {server 127.0.0.1:8010; }server {listen 80;server_name your_domain.com;location / {proxy_pass http://localhost:8000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remot…

nfs存储IO等待,导致k8s业务系统卡慢问题处理

注:服务器配置:64C,128G,麒麟v10系统,系统磁盘使用空间(5T)均低于50%,存储磁盘iops约为800左右 发现业务系统卡慢,使用top 命令查看.系统负载较高长期保持在60以上,发现wa值的指标参数长期高于15,返现CPU用于写入磁盘IO等待的时间较高,系统的磁盘I/O压力较大. 配合开发查看日志…

Pytorch 项目实战-1: MNIST 手写数字识别

刚接触深度学习的小伙伴们&#xff0c;是不是经常听说 MNIST 数据集和 PyTorch 框架&#xff1f;今天就带大家从零开始&#xff0c;用 PyTorch 实现 MNIST 手写数字识别&#xff0c;轻松迈出深度学习实践的第一步&#xff01; 一、MNIST 数据集&#xff1a;深度学习界的 “Hel…

大数据量下Redis分片的5种策略

随着业务规模的增长&#xff0c;单一Redis实例面临着内存容量、网络带宽和计算能力的瓶颈。 分片(Sharding)成为扩展Redis的关键策略&#xff0c;它将数据分散到多个Redis节点上&#xff0c;每个节点负责整个数据集的一个子集。 本文将分享5种Redis分片策略。 1. 取模分片(M…

CentOS 7上搭建高可用BIND9集群指南

在 CentOS 7 上搭建一个高可用的 BIND9 集群通常涉及以下几种关键技术和策略的组合&#xff1a;主从复制 (Master-Slave Replication)、负载均衡 (Load Balancing) 以及可能的浮动 IP (Floating IP) 或 Anycast。 我们将主要关注主从复制和负载均衡的实现&#xff0c;这是构成高…

LangChain4j入门AI(六)整合提示词(Prompt)

前言 提示词&#xff08;Prompt&#xff09;是用户输入给AI模型的一段文字或指令&#xff0c;用于引导模型生成特定类型的内容。通过提示词&#xff0c;用户可以告诉AI“做什么”、 “如何做”以及“输出格式”&#xff0c;从而在满足需求的同时最大程度减少无关信息的生成。有…

【MySQL】笔记

&#x1f4da; 博主的专栏 &#x1f427; Linux | &#x1f5a5;️ C | &#x1f4ca; 数据结构 | &#x1f4a1;C 算法 | &#x1f152; C 语言 | &#x1f310; 计算机网络 在ubuntu中&#xff0c;改配置文件&#xff1a; sudo nano /etc/mysql/mysql.conf.d/mysq…

TDengine 运维—容量规划

概述 若计划使用 TDengine 搭建一个时序数据平台&#xff0c;须提前对计算资源、存储资源和网络资源进行详细规划&#xff0c;以确保满足业务场景的需求。通常 TDengine 会运行多个进程&#xff0c;包括 taosd、taosadapter、taoskeeper、taos-explorer 和 taosx。 在这些进程…

OpenCV CUDA模块图像过滤------创建一个盒式滤波器(Box Filter)函数createBoxFilter()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::createBoxFilter 是 OpenCV CUDA 模块中的一个工厂函数&#xff0c;用于创建一个 盒式滤波器&#xff08;Box Filter&#xff09;&…