在损失函数中使用神经网络导数

数据挖掘 梯度下降 损失函数 反向传播
2022-02-16 23:24:51

如何获得 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)

或它的变体。问题是我需要的价值d(xhat)dzd(yhat)dz(所以输出层相对于内部节点的梯度)。我使用钩子尝试了几件事,但到目前为止我发现没有用。我正在考虑做这样的事情:

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 即值是什么d(xhat)dzd(yhat)dz

谁能帮我这个?谢谢!

0个回答
没有发现任何回复~