optimizer
和loss
之间的显式连接在哪里?
优化器如何知道在不调用此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/