Pythorch连接向后损失()和优化器.step()

2024-10-01 11:36:09 发布

您现在位置:Python中文网/ 问答频道 /正文

optimizer和{}之间的显式连接在哪里?在

优化器如何知道在没有类似这样的调用的情况下从何处获得损失的梯度?在

-更多上下文-

当我最小化损失时,我不必将渐变传递给优化器。在

loss.backward() # Back Propagation
optimizer.step() # Gardient Descent

Tags: stepback情况optimizer梯度损失losspropagation
2条回答

当您调用loss.backward()时,它所做的只是计算损失中所有具有requires_grad = True的参数的损失梯度,并将它们存储在每个参数的parameter.grad属性中。在

optimizer.step()基于parameter.grad更新所有参数

不用深入研究Pythorch的内部结构,我可以给出一个简单的答案:

回想一下,在初始化optimizer时,您明确地告诉它应该更新模型的哪些参数(张量)。一旦你调用丢失的backward(),梯度就由张量本身“存储”(它们有一个^{}和一个^{}属性)。在计算模型中所有张量的梯度之后,调用optimizer.step()使优化器迭代所有参数(张量),它应该更新并使用它们内部存储的grad来更新它们的值。在

相关问题 更多 >