关于pytorch中网络loss传播和参数更新的理解


Posted in Python onAugust 20, 2019

相比于2018年,在ICLR2019提交论文中,提及不同框架的论文数量发生了极大变化,网友发现,提及tensorflow的论文数量从2018年的228篇略微提升到了266篇,keras从42提升到56,但是pytorch的数量从87篇提升到了252篇。

TensorFlow: 228--->266

Keras: 42--->56

Pytorch: 87--->252

在使用pytorch中,自己有一些思考,如下:

1. loss计算和反向传播

import torch.nn as nn
 
criterion = nn.MSELoss().cuda()
 
output = model(input)
 
loss = criterion(output, target)
loss.backward()

通过定义损失函数:criterion,然后通过计算网络真实输出和真实标签之间的误差,得到网络的损失值:loss;

最后通过loss.backward()完成误差的反向传播,通过pytorch的内在机制完成自动求导得到每个参数的梯度。

需要注意,在机器学习或者深度学习中,我们需要通过修改参数使得损失函数最小化或最大化,一般是通过梯度进行网络模型的参数更新,通过loss的计算和误差反向传播,我们得到网络中,每个参数的梯度值,后面我们再通过优化算法进行网络参数优化更新。

2. 网络参数更新

在更新网络参数时,我们需要选择一种调整模型参数更新的策略,即优化算法。

优化算法中,简单的有一阶优化算法:

关于pytorch中网络loss传播和参数更新的理解

其中关于pytorch中网络loss传播和参数更新的理解 就是通常说的学习率,关于pytorch中网络loss传播和参数更新的理解 是函数的梯度;

自己的理解是,对于复杂的优化算法,基本原理也是这样的,不过计算更加复杂。

在pytorch中,torch.optim是一个实现各种优化算法的包,可以直接通过这个包进行调用。

optimizer = torch.optim.Adam(model.parameters(), lr=0.01)

注意:

1)在前面部分1中,已经通过loss的反向传播得到了每个参数的梯度,然后再本部分通过定义优化器(优化算法),确定了网络更新的方式,在上述代码中,我们将模型的需要更新的参数传入优化器。

2)注意优化器,即optimizer中,传入的模型更新的参数,对于网络中有多个模型的网络,我们可以选择需要更新的网络参数进行输入即可,上述代码,只会更新model中的模型参数。对于需要更新多个模型的参数的情况,可以参考以下代码:

optimizer = torch.optim.Adam([{'params': model.parameters()}, {'params': gru.parameters()}], lr=0.01) 3) 在优化前需要先将梯度归零,即optimizer.zeros()。

3. loss计算和参数更新

import torch.nn as nn
import torch
 
criterion = nn.MSELoss().cuda()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
 
output = model(input)
 
loss = criterion(output, target)
 
​optimizer.zero_grad() # 将所有参数的梯度都置零
loss.backward()    # 误差反向传播计算参数梯度
optimizer.step()    # 通过梯度做一步参数更新

以上这篇关于pytorch中网络loss传播和参数更新的理解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python求算数平方根和约数的方法汇总
Mar 09 Python
Python编程实现正则删除命令功能
Aug 30 Python
手把手教你python实现SVM算法
Dec 27 Python
Python读取图片为16进制表示简单代码
Jan 19 Python
ubuntu17.4下为python和python3装上pip的方法
Jun 12 Python
Python Pillow Image Invert
Jan 22 Python
Flask模板引擎之Jinja2语法介绍
Jun 26 Python
python实现两个经纬度点之间的距离和方位角的方法
Jul 05 Python
python Pandas如何对数据集随机抽样
Jul 29 Python
如何运行带参数的python脚本
Nov 15 Python
关于tensorflow的几种参数初始化方法小结
Jan 04 Python
pyqt5数据库使用详细教程(打包解决方案)
Mar 25 Python
对pytorch中的梯度更新方法详解
Aug 20 #Python
PyTorch: 梯度下降及反向传播的实例详解
Aug 20 #Python
python爬虫 urllib模块发起post请求过程解析
Aug 20 #Python
pytorch 加载(.pth)格式的模型实例
Aug 20 #Python
python multiprocessing模块用法及原理介绍
Aug 20 #Python
python 并发编程 阻塞IO模型原理解析
Aug 20 #Python
PyTorch中常用的激活函数的方法示例
Aug 20 #Python
You might like
关于我转生变成史莱姆这档事:第二季PV上线,萌王2021年回归
2020/05/06 日漫
域名查询代码公布
2006/10/09 PHP
深入PHP获取随机数字和字母的方法详解
2013/06/06 PHP
php简单随机字符串生成方法示例
2017/04/19 PHP
如何快速的呈现我们的网页的技巧整理
2007/07/01 Javascript
推荐11款jQuery开发的复选框和单选框美化插件
2011/08/02 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
JS弹出层的显示与隐藏示例代码
2013/12/27 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
Jquery Ajax解析XML数据(同步及异步调用)简单实例
2014/02/12 Javascript
javascript批量修改文件编码格式的方法
2015/01/27 Javascript
JavaScript实现按照指定长度为数字前面补零输出的方法
2015/03/19 Javascript
jQuery菜单插件superfish使用指南
2015/04/21 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
2015/12/04 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
2016/12/12 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
2017/03/02 Javascript
JavaScript输入框字数实时统计更新
2017/06/17 Javascript
JavaScript分步实现一个出生日期的正则表达式
2018/03/22 Javascript
OpenLayers实现图层切换控件
2020/09/25 Javascript
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
[01:34:42]NAVI vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
用实例说明python的*args和**kwargs用法
2013/11/01 Python
Android应用开发中Action bar编写的入门教程
2016/02/26 Python
python回调函数中使用多线程的方法
2017/12/25 Python
python实现支付宝当面付(扫码支付)功能
2018/05/30 Python
python打印直角三角形与等腰三角形实例代码
2019/10/20 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
《火烧云》教学反思
2014/04/12 职场文书
预备党员综合考察材料
2014/05/31 职场文书
我的职业生涯规划:打造自己的运动帝国
2014/09/18 职场文书
详细了解java监听器和过滤器
2021/07/09 Java/Android
Nginx防盗链与服务优化配置的全过程
2022/01/18 Servers
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis