Pytorch 中特定层参数的梯度

Gradient with respect to the parameters of a specific layer in Pytorch

我正在使用多个网络在 pytorch 中构建模型。例如,让我们考虑 netAnetB。在损失函数中,我需要使用组合 netA(netB)。在优化的不同部分,我需要计算 loss_func(netA(netB)) 仅关于 netA 参数的梯度,而在另一种情况下,我需要计算 netB 参数的梯度。应该如何解决这个问题?

我的方法:在使用 netA 的参数计算梯度的情况下,我使用 loss_func(netA(netB.detach())).

如果我写 loss_func(netA(netB).detach()) 似乎 netAnetB 的两个参数都是分离的。

我尝试使用 loss_func(netA.detach(netB)) 以便仅分离 netA 的参数,但它不起作用。 (我得到 netA 没有属性分离的错误。)

梯度是张量而非网络的属性。
因此,你只能.detach一个张量。

您可以为每个网络设置不同的优化器。这样你就可以一直计算所有网络的梯度,但只更新相关网络的权重(调用相关优化器的step)。