python - 在 pytorch 中使用神经网络作为另一个神经网络的损失
问题描述
我很难在 Pytorch Lightning 中实现以下内容。我有两个神经网络,比如f,g和g是预训练的,而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。
解决方案
推荐阅读
- angular - 根据单选按钮值动态禁用角垫单选复选框
- java - 非 html 方法 Spring MVC
- git - 排除 ftp-deploy 中的密钥故障
- c# - Xamarin Forms 在 Shell 页面内显示选取器
- http - 一个电子邮件应用程序使用不同的端口
- mongoose - Graphql 使用猫鼬解析信息
- python - AttributeError:“NoneType”对象在 Python 3 中使用 beautifulsoup 没有属性“get”
- javascript - Javascript“addEventListener”函数在页面加载时自动触发
- c# - 为什么我在扩展方法中的 `char` 参数被解释为 `int`?
- javascript - blob.text() 的逆运算