栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么我们需要在PyTorch中调用zero_grad()?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么我们需要在PyTorch中调用zero_grad()?

在中

PyTorch
,我们需要在开始进行反向传播之前将梯度设置为零,因为PyTorch
在随后的向后传递中 累积梯度
。在训练RNN时这很方便。因此,默认操作是在每次调用时累积(即求和)梯度
loss.backward()


因此,理想情况下,当您开始训练循环时,应该

zero out thegradients
正确进行参数更新。否则,梯度将指向预期方向以外的其他方向,即朝向
最小值 (或 最大化 ,如果达到最大化目标)。

这是一个简单的示例:

import torchfrom torch.autograd import Variableimport torch.optim as optimdef linear_model(x, W, b):    return torch.matmul(x, W) + bdata, targets = ...W = Variable(torch.randn(4, 3), requires_grad=True)b = Variable(torch.randn(3), requires_grad=True)optimizer = optim.Adam([W, b])for sample, target in zip(data, targets):    # clear out the gradients of all Variables     # in this optimizer (i.e. W, b)    optimizer.zero_grad()    output = linear_model(sample, W, b)    loss = (output - target) ** 2    loss.backward()    optimizer.step()

或者,如果您要进行 香草梯度下降 ,则:

W = Variable(torch.randn(4, 3), requires_grad=True)b = Variable(torch.randn(3), requires_grad=True)for sample, target in zip(data, targets):    # clear out the gradients of Variables     # (i.e. W, b)    W.grad.data.zero_()    b.grad.data.zero_()    output = linear_model(sample, W, b)    loss = (output - target) ** 2    loss.backward()    W -= learning_rate * W.grad.data    b -= learning_rate * b.grad.data

注意
:在张量上调用时,会发生梯度的
累积 (即 求和
)。

.backward()``loss



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/638789.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号