PyTorch官网demo解读——第一个神经网络(3)

上一篇:PyTorch官网demo解读——第一个神经网络(2)-CSDN博客

上一篇文章我们讲解了第一个神经网络的模型,这一篇我们来聊聊梯度下降。

大佬说梯度下降是深度学习的灵魂;梯度是损失函数(代价函数)的导数,而下降的目的是让我们的损失不断减少,达到模型收敛的效果,最终拟合出最优的参数w。

所以,我们要先从损失函数(代价函数)说起。

  • 损失函数

从上一篇我们知道这个神经网络的模型是:y = wx + b

对于单一个样本(x, y),它的损失值就是:loss = wx + b - y

为了简单好理解,我们先把b去掉,那么 loss = wx - y,这个误差值可能是负数,而我们衡量一个误差值使用负数好像有点奇怪,于是我们使用均方差,那么单个样本的损失就变成这样:

loss = (wx - y) ^2

假定我们有n个样本【(x1, y1), (x2, y2) …… (xn, yn)】,那么我们的损失函数就是:

这个损失函数实际上是一个开口向上的抛物线,我随机取了5个样本值,手搓了一下,画出来如下图:

  • 梯度下降

梯度实际上就是损失函数的导数,即抛物线上某个点的变化率

所以梯度函数是:

t = 2aw + b

下降就是每次迭代,将当前的权重减去 梯度值乘以学习率,即:

w = w - t * lr

其中 lr 表示学习率,学习率可以理解为我们每次迈的步伐大小,如果迈的步伐太大,会导致在逼近最优参数时难以收敛,步伐太大跨过去了,在最优参数左右摇摆。所以通常学习率会设置比较小的值。

  • 代码

上面我们万般无奈地使用了一堆数学公式...,但有时候数学是最好的抽象方式,就像程序员喜欢说 read the f**king source code 一样。语言是对事物的抽象,而数学是对语言的进一步抽象吧,语言无法表达某些自然的规律,所以需要通过数学来表达,哈哈!

好啦,回顾第一篇的demo代码,关于损失函数,pytorch demo的代码极为精简:

# 丢失函数 loss function
def nll(input, target):return -input[range(target.shape[0]), target].mean()
loss_func = nll

而梯度下降就更为精简了,梯度是自动推导的,只需设置一个标志:

weights.requires_grad_()

没错,只需上面这行代码,在每次训练迭代后调用 loss.backward(),梯度就被计算出来啦,而我们只需在每次迭代中减去梯度值就好,如下:

pred = model(xb) # 通过模型预测
loss = loss_func(pred, yb) # 通过与实际结果比对,计算丢失值loss.backward() # 反向传播
with torch.no_grad():weights -= weights.grad * lr  # 调整权重值bias -= bias.grad * lr  # 调整偏差值weights.grad.zero_()bias.grad.zero_()

weights.grad.zero_()的作用是将每次迭代的梯度清零,不然下次计算梯度的时候会进行叠加。

关于梯度下降,就聊到这里吧!有问题可以留言探讨,共同学习!

未有知而不行者,知而不行,只是未知!

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

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

相关文章

简述一下微信小程序的路由概念

简述一下微信小程序的路由概念 不管是nodejs的express、koa,还是vue或者是react,包括小程序,这些应用框架中都包含了一个基本核心概念也就是路由所有应用框架中的路由都有共通性,主要包括:静态路由表、分配地址、统一入…

云渲染UE4像素流送搭建(winows、ubuntu)

windows/ubuntu20.4下UE4.27.2像素流送 像素流送技术可以将服务器端打包的虚幻引擎应用程序在客户端的浏览器上运行,用户可以通过浏览器操作虚幻引擎应用程序,客户端无需下载虚幻引擎,本文实现两台机器通过物理介质网线实现虚幻引擎应用程序…

智能优化算法应用:基于广义正态分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于广义正态分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于广义正态分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.广义正态分布算法4.实验参数设定…

QTableWidget 中加入 图标居中问题的解决

思路一:直接在QTabelWidget中加入 QTableWidgetItem ,设置 item 的 icon 问题:难以居中 思路二:在 QTableWidget 中 插入 QLabel ,把图标放到 QLabel 上 问题:存在点击图标困难的问题 思路三&#xff1a…

【序列化和反序列化】

🍁什么是序列化和反序列化? 🍁典型解析🍁拓展知识仓🍁如何进行序列化和反序列化🍁未实现Serializable,可以序列化吗? 🍁典型解析 在Java中,我们可以通过多种方式来创建对…

我的NPI项目之Android电源系列(四) -- 关于剩余充满时间的问题的代码跟踪-max1720x_battery.c qpnp-smb2.c

从我的NPI项目之Android电源系列(三), 能够看出,healthd是通过读取/sys/class/power_supply/battery/time_to_full_now而进行充满剩余时间的。 在/sys/class/power_supply/battery/...目录下有很多文件,具体内容如下: /sys/class…

详谈 springboot整合shiro

背景: 本章将进一步的落地实践学习,在springboot中如何去整合shrio,整个过程步骤有个清晰的了解。 利用Shiro进行登录认证主要步骤: 1. 添加依赖:首先,在pom.xml文件中添加Spring Boot和Shiro的相关依赖…

java接口限流详解

目录 1.简介1.1.为什么需要限流?1.2.限流和熔断有什么区别?1.3.限流和削峰有什么区别?1.4 缓存,降级,限流简介 2.应用级限流2.1 控制并发数量2.2 控制访问速率2.2.1 令牌桶算法2.2.2 漏桶算法 3.分布式限流4.交流群 1.简介 接口…

漏洞复现-红帆OA iorepsavexml.aspx文件上传漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

浅谈师范双非普本工科专业的秋招历程

本人普通师范院校通信工程专业,于秋招历程之中四处碰壁,迫于家庭等各种因素考虑,最终选择移动的偏远县城岗位的OFFER!本人秋招历程之中,屡屡碰壁,也算得上“收获满满”!我简单给各位浅谈一下我的…

气动冷凝水回收泵机械浮球泵的特点工作原理介绍 不需要电源

​ 1:气动凝水回收泵机械式介绍 气动冷凝水回收泵是一种设计用于不使用电力来泵送冷凝液、油和其他高温液体等的设备。它无需维护,能将大量凝结水和其它液体从低位、低压或真空场所泵送到高处及高压区域。与传统电泵相比,气动冷凝水回收泵可…

八股文打卡day10——计算机网络(10)

面试题:HTTP1.1和HTTP2.0的区别? 我的回答: 1.多路复用:HTTP1.1每次请求响应一次都得建立一次连接,HTTP1.1引入了持久连接Connection:Keep-Alive,可以建立一次连接,进行多次请求响…

cmake常见操作记录(持续更新)

cmake常见操作记录 通用1. 指定生成目录2. 指定宏3. 设置编译类型(Debug,Release) linuxwindwos1. windows下设置编译位数 通用 1. 指定生成目录 cmake -B build .2. 指定宏 SET(_COMPACT_ false CACHE BOOL "whether to compact.&qu…

放大电路的静态分析和动态分析例题

(一) (二) (三) (四) (五)

QT中,socket通讯要考虑哪些问题?(面试题)

在Qt中进行Socket通信时,需要考虑以下几个问题: 连接建立和断开:确保在客户端和服务器端之间能够正确地建立和断开连接,以便进行正常的数据传输。 数据传输格式:确定数据传输的格式,包括数据的编码方式、数…

Spring Boot学习随笔- 第一个Thymeleaf应用(基础语法th:,request、session作用域取值)

学习视频:【编程不良人】2021年SpringBoot最新最全教程 第十五章、Thymeleaf Thymeleaf是一种现代化的服务器端Java模板引擎,专门用于Web和独立环境。Thymeleaf在有网络和无网络的环境下皆可运行,即可以让美工在浏览器查看页面的静态效果&am…

34. 在排序数组中查找元素的第一个和最后一个位置

34. 在排序数组中查找元素的第一个和最后一个位置 题目链接&#xff1a;34. 在排序数组中查找元素的第一个和最后一个位置 代码如下&#xff1a; class Solution { public:vector<int> searchRange(vector<int>& nums, int target) {vector<int> range…

下载MySQL Connector/C++

MySQL :: Download Connector/C

MySQL 一个线程(或事务)在更新表时,另一个线程能否读取这个表

在MySQL中&#xff0c;一个线程&#xff08;或事务&#xff09;在更新表时&#xff0c;另一个线程能否读取这个表主要取决于两个因素&#xff1a;使用的事务隔离级别和锁的类型。MySQL默认使用行级锁&#xff0c;这意味着锁定的范围相对较小&#xff0c;通常不会锁定整个表。下…

智能优化算法应用:基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.向量加权平均算法4.实验参数设定…