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

 更新时间:2020年06月24日 11:39:10   作者:血雨腥风霜  
这篇文章主要介绍了PyTorch中model.zero_grad()和optimizer.zero_grad()用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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

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

参数更新和反向传播

上图为一个简单的梯度下降示意图。比如以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中文编码知识点

    在本篇文章里小编给大家分享了关于Python中文编码的相关知识点以及对应实例内容,有兴趣的朋友们学习下。
    2019-02-02
  • Python日期操作学习笔记

    Python日期操作学习笔记

    字符串是使用静态的方式进行存储,只能读而不能直接修改字符内容。特别将一堆对字符串并在一起的时候,虽然可以直接相加,听说这样的速度奇慢,只有用其它函数的方式进行,好在也不太麻烦。
    2008-10-10
  • Python获取央视节目单的实现代码

    Python获取央视节目单的实现代码

    这篇文章主要介绍了Python获取央视节目单的实现代码,涉及Python页面采集的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 使用python采集Excel表中某一格数据

    使用python采集Excel表中某一格数据

    这篇文章主要介绍了使用python采集Excel表中某一格数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 1 行 Python 代码快速实现 FTP 服务器

    1 行 Python 代码快速实现 FTP 服务器

    FTP 服务器,在此之前我都是使用Linux的vsftpd软件包来搭建FTP服务器的,现在发现了利用pyftpdlib可以更加简单的方法即可实现FTP服务器的功能。下面小编给大家带来了1 行 Python 代码快速实现 FTP 服务器,需要的朋友参考下
    2018-01-01
  • Python中将列表转化为链表的方法详解

    Python中将列表转化为链表的方法详解

    这篇文章主要介绍了Python中将列表转化为链表的方法详解,本文的主要问题是输入一组数,将其按照顺序添加到链表中,文中提供了解决思路与部分实现代码,需要的朋友可以参考下
    2023-11-11
  • Python+OpenCV之直方图均衡化详解

    Python+OpenCV之直方图均衡化详解

    直方图均衡化是一种增强图像对比度的方法,其主要思想是将一副图像的直方图分布变成近似均匀分布,从而增强图像的对比度。本文将通过示例为大家讲讲直方图均衡化的原理与实现,感兴趣的可以了解一下
    2022-09-09
  • python定时检查启动某个exe程序适合检测exe是否挂了

    python定时检查启动某个exe程序适合检测exe是否挂了

    定时检查启动某个exe程序这种情况下适合检测某个exe程序是否挂了,感兴趣的朋友可以了解下,希望本文对你有所帮助
    2013-01-01
  • 在MAC上搭建python数据分析开发环境

    在MAC上搭建python数据分析开发环境

    这篇文章主要介绍了在MAC上搭建python数据分析开发环境的相关资料,需要的朋友可以参考下
    2016-01-01
  • Python如何将控制台输出另存为日志文件

    Python如何将控制台输出另存为日志文件

    这篇文章主要介绍了Python如何将控制台输出另存为日志文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05

最新评论