optimizerloss之间的显式连接在哪里?

优化器如何知道在不调用此optimizer.step(loss)的情况下从何处获得损耗的梯度?

-更多背景-

当我将损失降到最低时,我不必将梯度传递给优化器。

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

最佳答案

在不深入研究pytorch内部的情况下,我可以提供一个简单的答案:
回想一下,在初始化optimizer时,您明确地告诉它应更新模型的哪些参数(张量)。一旦在损失上调用grad,渐变将由张量本身“存储”(它们具有 requires_grad backward() 属性)。在计算了模型中所有张量的梯度之后,调用optimizer.step()使优化器对应该更新的所有参数(张量)进行迭代,并使用其内部存储的grad更新其值。
可以在this answer中找到有关计算图的更多信息以及pytorch张量中存储的其他“grad”信息。

关于machine-learning - pytorch-loss.backward()和optimizer.step()之间的连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53975717/

10-12 19:16