【问题标题】:PyTroch, Gradient calculationsPyTorch,梯度计算
【发布时间】:2019-07-05 07:14:34
【问题描述】:

https://colab.research.google.com/github/pytorch/tutorials/blob/gh-pages/_downloads/neural_networks_tutorial.ipynb

您好,我正在尝试使用 pytorch 了解 NN。 我对梯度计算有疑问..

将 torch.optim 导入为 optim

create your optimizer
optimizer = optim.SGD(net.parameters(), lr=0.01)


```
# in your training loop:
optimizer.zero_grad()   # zero the gradient buffers
output = net(input)
loss = criterion(output, target)
loss.backward()
optimizer.step()    # Does the update
```

从 about 代码中,我了解到 loss.backward() 计算梯度。 我不确定这些信息如何与optimizer 共享以更新渐变。

谁能解释一下。。

提前致谢!

【问题讨论】:

  • 渐变附加到模型内部的变量(通过调用net.parameters() 访问)。当您调用loss.backward() 时,会填充这些渐变。正如您的优化器知道来自 optim.SGD(net.parameters(), lr=0.01) 的参数一样,它可以简单地继续访问每个参数及其相应的渐变并应用它们。

标签: pytorch gradient


【解决方案1】:

当你在这一行创建优化器时

optimizer = optim.SGD(net.parameters(), lr=0.01)

您向net.parameters() 提供了所有将根据梯度更新的可学习参数。

模型和优化器之所以相连,只是因为它们共享相同的参数。

PyTorch 参数是张量。它们不再被称为变量。

【讨论】:

    猜你喜欢
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多