pytorch .item_pytorch + SGD

news/2024/7/7 19:38:24

梯度下降是模型优化常用方法,原理也比较简单,简言之就是参数沿负梯度方向更新,参数更新公式如下。

,其中
表示的是步长,用于控制每次更新移动的步伐。

我们将使用pytorch来试验下这个方法。

首先先生成模拟数据。

x1 

目标模型表达式,需要优化的参数为

初始化需要优化的参数

w1 

损失函数使用平方损失

平方损失的梯度计算比较简单,根据链式法则,容易计算

因此梯度更新函数如下,

def 

使用随机梯度下降法,对每一个样本计算梯度,并更新参数

def 

初始使用lr = 0.001发现,w1和w2并没有拟合到预期的值。做出的图显示,loss没有拟合的趋势,提示我们选择的学习率过大,导致难以拟合。

bd0c6fd7b61c74d951ff18f8a4f4c420.png
Learing Rate = 0.001

调整学习率到0.0001之后,结果拟合的很好,w1和w2的值也和预期一致。

18b1f4e40f2178d431f57caf586a863f.png
Learning Rate = 0.0001

以上就是使用SGD的基本流程,不过上述步骤pytorch都帮我们封装好了,不需要这么麻烦,下面是pytorch的自动求导版本。

首先是几个概念。

optim(优化器)

pytorch已经封装好了很多常用的优化器,可调用step成员函数来对参数进行更新。

常用优化器的包括:SGD, Adam, Adagrad, Rprop。

backward(方向传播)

自动梯度计算,省了很大麻烦!

backward函数会根据Variable的成员变量requires_grad来觉得是否需要对该变量计算梯度。

计算完的梯度保存在成员变量grad中。

注意: backward计算的梯度不会自动清零,而是累加到上一次的梯度中,所以每次更新参数,都需要对梯度清零一次。

有两种方式:

  1. 调用optim的zero_grad函数
  2. 手动对变量梯度清零. 例:w1.grad.data.zero_()

以下就是简易版本。

def 

下篇文章介绍下常用的优化器~


http://lihuaxi.xjx100.cn/news/272067.html

相关文章

Java学习提升体系结构

2019独角兽企业重金招聘Python工程师标准>>> 第一步:源码分析 看看大牛是如何写代码的,提升技术审美,提升核心竞争力。(重点) 第二步:工程化 工欲善其事必先利其器,不管是小白&#…

谈CVPR 2021审稿

点击上方“视学算法”,选择加"星标"或“置顶”重磅干货,第一时间送达作者丨欧阳万里知乎来源丨https://zhuanlan.zhihu.com/p/348428483编辑丨极市平台本文仅供学术参考,如若侵权请联系后台做删文处理本文有感于本次CVPR结果出来后…

你见过最差的算法工程师都有哪些表现?

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达导读:你见过最差的算法工程师什么样?"百度百科型选手?"、"播客型选手?"、"Github型选手"、…

《评人工智能如何走向新阶段》后记(再续20)

320.开源的C跨平台人脸检测项目,仅用CPU就能跑出惊人的1000FPS 在电脑或手机上都可运行! 人脸检测广泛用于人机交互、安防监控、社交娱乐等领域。在很多人脸检测方法中,使用卷积神经网络深度算法是目前较为流行的方法之一,然而在…

总在说SpringBoot内置了tomcat启动,那它的原理你说的清楚吗?

点击上方“方志朋”,选择“设为星标”回复”666“获取新整理的面试文章作者:歪头儿在帝都cnblogs.com/sword-successful/p/11383723.html前言 不得不说SpringBoot的开发者是在为大众程序猿谋福利,把大家都惯成了懒汉,xml不配置了&…

io python 读取pdf_实用又好用,6 款 Python 特殊文本格式处理库推荐

以下是一些 Python 编写的用来解析和操作特殊文本格式的库,希望对大家有所帮助。01.Tablibhttps://www.oschina.net/p/TablibTablib 是一个用来处理与表格格式数据有关的 Python 库,允许导入、导出、管理表格格式数据,并具备包括切片、动态列…

远程usb端口映射_PLC远程控制

如何实现PLC联网、PLC远程下载、PLC远程监控等功能,下面介绍PLC远程共享的方法!随着物联网技术的发展和信息技术的普及,越来越多的PLC、HMI等自动控制产品的生产厂家或集成商迫切需要对现场设备进行远程监控、调试和维护。从经济性上讲&#…

进程间通信的几种方式

进程间通信的方式主要有:管道,共享内存,信号量,消息队列。详细参考https://blog.csdn.net/skyroben/article/details/715133851.进程间通信每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到&#…