如何获得 NN 中一个节点相对于另一个节点的梯度?我需要训练一个 NN,为了简单起见,它有 2 个神经元作为输入(x,y),一个神经元作为瓶颈(z),还有 2 个作为输出(x_hat,y_hat)。我需要一个看起来像这样的损失:
loss = (x-x_hat)**2+(y-y_hat)**2+abs(sqrt((d(x_hat)/dz)**2+(d(y_hat)/dz)**2)-1)
或它的变体。问题是我需要的价值和(所以输出层相对于内部节点的梯度)。我使用钩子尝试了几件事,但到目前为止我发现没有用。我正在考虑做这样的事情:
loss_1 = (x-x_hat)**2+(y-y_hat)**2
loss_1.backward(retain_graph=True)
loss_2 = abs(sqrt((d(x_hat)/dz)**2+(d(y_hat)/dz)**2)-1)
loss_2.backward()
在我调用之后loss_1.backward(retain_graph=True)
,我需要的梯度应该已经计算出来了,我只是不知道如何访问它们以便将它们传递给 loss_2 即值是什么和
谁能帮我这个?谢谢!