PyTorch中model.zero_grad()和optimizer.zero_grad()用法


Posted in Python onJune 24, 2020

废话不多说,直接上代码吧~

model.zero_grad()
optimizer.zero_grad()

首先,这两种方式都是把模型中参数的梯度设为0

当optimizer = optim.Optimizer(net.parameters())时,二者等效,其中Optimizer可以是Adam、SGD等优化器

def zero_grad(self):
 """Sets gradients of all model parameters to zero."""
 for p in self.parameters():
  if p.grad is not None:
  p.grad.data.zero_()

补充知识:Pytorch中的optimizer.zero_grad和loss和net.backward和optimizer.step的理解

引言

一般训练神经网络,总是逃不开optimizer.zero_grad之后是loss(后面有的时候还会写forward,看你网络怎么写了)之后是是net.backward之后是optimizer.step的这个过程。

real_a, real_b = batch[0].to(device), batch[1].to(device)

fake_b = net_g(real_a)
optimizer_d.zero_grad()

# 判别器对虚假数据进行训练
fake_ab = torch.cat((real_a, fake_b), 1)
pred_fake = net_d.forward(fake_ab.detach())
loss_d_fake = criterionGAN(pred_fake, False)

# 判别器对真实数据进行训练
real_ab = torch.cat((real_a, real_b), 1)
pred_real = net_d.forward(real_ab)
loss_d_real = criterionGAN(pred_real, True)

# 判别器损失
loss_d = (loss_d_fake + loss_d_real) * 0.5

loss_d.backward()
optimizer_d.step()

上面这是一段cGAN的判别器训练过程。标题中所涉及到的这些方法,其实整个神经网络的参数更新过程(特别是反向传播),具体是怎么操作的,我们一起来探讨一下。

参数更新和反向传播

PyTorch中model.zero_grad()和optimizer.zero_grad()用法

上图为一个简单的梯度下降示意图。比如以SGD为例,是算一个batch计算一次梯度,然后进行一次梯度更新。这里梯度值就是对应偏导数的计算结果。显然,我们进行下一次batch梯度计算的时候,前一个batch的梯度计算结果,没有保留的必要了。所以在下一次梯度更新的时候,先使用optimizer.zero_grad把梯度信息设置为0。

我们使用loss来定义损失函数,是要确定优化的目标是什么,然后以目标为头,才可以进行链式法则和反向传播。

调用loss.backward方法时候,Pytorch的autograd就会自动沿着计算图反向传播,计算每一个叶子节点的梯度(如果某一个变量是由用户创建的,则它为叶子节点)。使用该方法,可以计算链式法则求导之后计算的结果值。

optimizer.step用来更新参数,就是图片中下半部分的w和b的参数更新操作。

以上这篇PyTorch中model.zero_grad()和optimizer.zero_grad()用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python控制台显示时钟的示例
Feb 24 Python
python操作xml文件示例
Apr 07 Python
Python re模块介绍
Nov 30 Python
python脚本实现数据导出excel格式的简单方法(推荐)
Dec 30 Python
用Python实现KNN分类算法
Dec 22 Python
python+PyQT实现系统桌面时钟
Jun 16 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
Jul 23 Python
Python 实现自动完成A4标签排版打印功能
Apr 09 Python
Python实现AI换脸功能
Apr 10 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
Oct 18 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
Oct 29 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
Jan 21 Python
Pytorch实现将模型的所有参数的梯度清0
Jun 24 #Python
你需要学会的8个Python列表技巧
Jun 24 #Python
pytorch实现查看当前学习率
Jun 24 #Python
在pytorch中动态调整优化器的学习率方式
Jun 24 #Python
CentOS 7如何实现定时执行python脚本
Jun 24 #Python
python tkiner实现 一个小小的图片翻页功能的示例代码
Jun 24 #Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
Jun 24 #Python
You might like
php 数组动态添加实现代码(最土团购系统的价格排序)
2011/12/30 PHP
Ajax和PHP正则表达式验证表单及验证码
2016/09/24 PHP
用JS实现一个页面多个css样式实现
2008/05/29 Javascript
js继承 Base类的源码解析
2008/12/30 Javascript
javascript new 需不需要继续使用
2009/07/02 Javascript
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
JavaScript中数据结构与算法(四):串(BF)
2015/06/19 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
2015/08/24 Javascript
Vue.js每天必学之组件与组件间的通信
2016/09/08 Javascript
详解Vue整合axios的实例代码
2017/06/21 Javascript
简单谈谈vue的过渡动画(推荐)
2017/10/11 Javascript
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
2017/10/19 jQuery
vue axios数据请求及vue中使用axios的方法
2018/09/10 Javascript
详解Ant Design of React的安装和使用方法
2018/12/27 Javascript
微信小程序Echarts图表组件使用方法详解
2019/06/25 Javascript
浅谈JavaScript窗体Window.ShowModalDialog使用
2020/07/22 Javascript
[45:16]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第一场 12.12
2020/12/16 DOTA
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
详解Python如何生成词云的方法
2018/06/01 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
英国最专业的健身器材供应商之一:Best Gym Equipment
2017/12/22 全球购物
经理助理岗位职责
2014/03/05 职场文书
保险公司早会主持词
2014/03/22 职场文书
听课评语大全
2014/04/30 职场文书
幼儿园师德师风学习材料
2014/05/29 职场文书
企业法人代表任命书
2014/06/06 职场文书
小学捐书活动总结
2014/07/05 职场文书
社会工作专业求职信
2014/07/15 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
商务代表岗位职责
2015/02/15 职场文书
个人先进事迹总结
2015/02/26 职场文书
2015年度个人业务工作总结
2015/04/27 职场文书
建党伟业的观后感
2015/06/01 职场文书
无房证明样本
2015/06/17 职场文书
2016年秋季开学典礼新闻稿
2015/11/25 职场文书