pytorch - 训练和评估模式中的反向传播相结合
问题描述
我正在尝试为如下定义的损失函数反向传播网络:L = L_1 + L_2。这里 L_1 是使用 dropout 和 batchnorm 激活的层计算的,而 L_2 是在 dropout 和 batchnorm 设置为非活动的情况下计算的。要更新 L_1 和 L_2 的参数梯度,必须求和。我已经编写了以下程序,但不知道如何检查正确性。任何帮助将不胜感激。
optimizer.zero_grad()
net.train()
...# Calculation of L_1...
L_1.backward()
net.eval()
...# Calculation of L_2...
L_2.backward()
net.train()
optimizer.step()
我的理解是,L_1.backward()
它将计算 L_1 相对于所有参数(包括 batchnorm)的L_2.backward()
梯度,而仅计算参数的梯度并将其添加到原始梯度中。最后将网络设置为训练模式optimizer.step()
,然后更新所有参数(包括 batchnorm)。
解决方案
推荐阅读
- android - 推送通知不适用于带有 release-apk 的 Android 7.0 (FCM)
- c# - DataAnnotation Localization Error when not translate
- android - 应用程序用户如何选择他是否喜欢在 android 中使用 firebase 接收通知
- javascript - 活动标签的动态定义
- javascript - setMonth 和 getMonth 不返回相同的值
- linux - 使用 SED 实用程序输出匹配的模式而不进行替换
- google-cloud-platform - Google Dataprep 导入/导出流程
- java - 将第一个 @ 替换为 {{ 将第二个 @ 替换为 }}
- batch-file - 通过使用批处理脚本替换某些字符来重命名一堆文件
- php - PHP通过HTML一个标签传递POST