相关文章推荐
旅行中的闹钟  ·  c++ ...·  1 年前    · 
年轻有为的双杠  ·  qml报错error: Expected ...·  2 年前    · 
有胆有识的蛋挞  ·  中华人民共和国工业和信息化部·  2 年前    · 
干练的麻辣香锅  ·  python:截取两个字符串中间的内容 - ...·  2 年前    · 
开朗的卡布奇诺  ·  CUDA编程之快速入门 - Madcola ...·  3 年前    · 
Code  ›  PyTorch中model.zero_grad()和optimizer.zero_grad()用法开发者社区
https://cloud.tencent.com/developer/article/1725230
坚强的机器猫
2 年前
作者头像
砸漏
0 篇文章

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

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 恩蓝脚本 > PyTorch中model.zero_grad()和optimizer.zero_grad()用法

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

作者头像
砸漏
发布 于 2020-10-21 15:00:49
3K 0
发布 于 2020-10-21 15:00:49
举报

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

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)
 
推荐文章
旅行中的闹钟  ·  c++ 结构体定义了构造函数,为什么不能使用初始化列表的方式了 - CSDN文库
1 年前
年轻有为的双杠  ·  qml报错error: Expected token “)“._numbers.qml:119: error: expected token `,-CSDN博客
2 年前
有胆有识的蛋挞  ·  中华人民共和国工业和信息化部
2 年前
干练的麻辣香锅  ·  python:截取两个字符串中间的内容 - 小白菜学生信 - 简书
2 年前
开朗的卡布奇诺  ·  CUDA编程之快速入门 - Madcola - 博客园
3 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号