相关疑难解决方法(0)

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

zero_grad()需要在训练期间调用该方法.但文档不是很有帮助

|  zero_grad(self)
|      Sets gradients of all model parameters to zero.
Run Code Online (Sandbox Code Playgroud)

为什么我们需要调用这个方法?

python neural-network gradient-descent deep-learning pytorch

42
推荐指数
3
解决办法
2万
查看次数

了解 PyTorch 中的累积梯度

我试图理解PyTorch. 我的问题与这两个有些相关:

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

为什么我们需要显式调用 zero_grad()?

对第二个问题的已接受答案的评论表明,如果小批量太大而无法在单个前向传递中执行梯度更新,因此必须将其拆分为多个子批次,则可以使用累积梯度。

考虑以下玩具示例:

import numpy as np
import torch


class ExampleLinear(torch.nn.Module):

    def __init__(self):
        super().__init__()
        # Initialize the weight at 1
        self.weight = torch.nn.Parameter(torch.Tensor([1]).float(),
                                         requires_grad=True)

    def forward(self, x):
        return self.weight * x


if __name__ == "__main__":
    # Example 1
    model = ExampleLinear()

    # Generate some data
    x = torch.from_numpy(np.array([4, 2])).float()
    y = 2 * x

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

    y_hat = model(x)          # forward pass

    loss = (y - y_hat) ** 2 …
Run Code Online (Sandbox Code Playgroud)

python gradient-descent deep-learning pytorch

14
推荐指数
1
解决办法
8129
查看次数