Pytorch - 函数之间的梯度分布

数据挖掘 梯度下降 火炬
2022-03-03 20:16:03

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以更新渐变。

谁能解释一下这个。。

提前致谢 !

1个回答

回想一下您传递net.parameters()给优化器的内容,因此它可以访问“张量”对象以及它们的关联数据。与每个可学习张量参数相关联的相关数据字段之一是梯度缓冲区因此,backward()不仅计算梯度,而且将它们存储在每个参数张量中,以便每个参数的梯度向量与该参数一起存储。换句话说,对于某些参数存储以及该参数。然后调用简单地通过与它一起存储的梯度更新每个参数。θibackward()L(Θ)/θioptimizer.step()