【发布时间】:2019-07-05 07:14:34
【问题描述】:
您好,我正在尝试使用 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)的参数一样,它可以简单地继续访问每个参数及其相应的渐变并应用它们。