首页 > 解决方案 > 训练和评估模式中的反向传播相结合

问题描述

我正在尝试为如下定义的损失函数反向传播网络: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)。

标签: pytorchbackpropagation

解决方案


推荐阅读