我是PyTorch的新手,我很难理解loss
是如何知道如何通过loss.backward()
计算梯度的?
当然,我知道参数需要有requires_grad=True
,并且我知道它将x.grad
设置为适当的梯度,以便优化器稍后执行梯度更新。
优化器在实例化时链接到模型参数,但损失永远不会链接到模型。
我一直在通过this thread,但我认为没有人清楚地回答了这个问题,这个帖子的发起人似乎和我有同样的问题。
当我有两个不同的网络,有两个不同的损失函数和两个不同的优化器时,会发生什么?我将很容易地将优化器链接到每个网络,但是如果我从来没有将它们链接在一起,那么损失函数如何知道如何计算每个适当网络的梯度呢?
发布于 2019-11-14 07:59:25
损失本身是由网络参数导出的张量。图是隐式构造的,其中每个新张量,包括损失,都指向与其构造相关的张量。当您应用loss.backward()
时,pytorch向后跟随图形,并使用链规则(即反向传播)使用相对于该张量的损失的偏导数填充每个张量的.grad
成员。
发布于 2019-11-14 03:35:55
这个问题似乎非常笼统,所以我只能提供一些建议来帮助您入门(我希望如此):
如果上面没有回答您的问题,我要求您使用示例代码来澄清您的问题
https://stackoverflow.com/questions/58844168
复制相似问题