首页 > 解决方案 > 在 pytorch 中使用神经网络作为另一个神经网络的损失

问题描述

我很难在 Pytorch Lightning 中实现以下内容。我有两个神经网络,比如f,gg是预训练的,而f必须从头开始训练。f的损失定义为训练对(x,y)l1=mse(g(f(x)),g(y))。这里x,y是一维数组(时域信号),但对于这个问题来说并不重要。现在可以通过将f扩展为g来等效地定义损失,称为这个网络h并冻结g中的所有层。那么mse(h(x), g(y))就是和l1一样的 loss. 但是当我写作时,在训练之前:

    g.eval()
    for param in g.parameters():
        param.requires_grad = False

并尝试训练我的网络,然后我得到一个错误

RuntimeError: cudnn RNN backward can only be called in training mode

这当然是有意义的。所以我的问题是,如何使用g作为完全可反向传播的损失函数。我需要这个属性,因为我想计算梯度dg(f(x))/dx

标签: pythonneural-networkpytorchloss

解决方案


推荐阅读