2024-10-01 11:36:09 发布
网友
optimizer和{}之间的显式连接在哪里?在
optimizer
优化器如何知道在没有类似这样的调用的情况下从何处获得损失的梯度?在
-更多上下文-
当我最小化损失时,我不必将渐变传递给优化器。在
loss.backward() # Back Propagation optimizer.step() # Gardient Descent
当您调用loss.backward()时,它所做的只是计算损失中所有具有requires_grad = True的参数的损失梯度,并将它们存储在每个参数的parameter.grad属性中。在
loss.backward()
requires_grad = True
parameter.grad
optimizer.step()基于parameter.grad更新所有参数
optimizer.step()
不用深入研究Pythorch的内部结构,我可以给出一个简单的答案:
回想一下,在初始化optimizer时,您明确地告诉它应该更新模型的哪些参数(张量)。一旦你调用丢失的backward(),梯度就由张量本身“存储”(它们有一个^{}和一个^{}属性)。在计算模型中所有张量的梯度之后,调用optimizer.step()使优化器迭代所有参数(张量),它应该更新并使用它们内部存储的grad来更新它们的值。在
backward()
grad
当您调用
loss.backward()
时,它所做的只是计算损失中所有具有requires_grad = True
的参数的损失梯度,并将它们存储在每个参数的parameter.grad
属性中。在optimizer.step()
基于parameter.grad
更新所有参数不用深入研究Pythorch的内部结构,我可以给出一个简单的答案:
回想一下,在初始化} 和一个^{} 属性)。在计算模型中所有张量的梯度之后,调用
optimizer
时,您明确地告诉它应该更新模型的哪些参数(张量)。一旦你调用丢失的backward()
,梯度就由张量本身“存储”(它们有一个^{optimizer.step()
使优化器迭代所有参数(张量),它应该更新并使用它们内部存储的grad
来更新它们的值。在相关问题 更多 >
编程相关推荐