我训练了一个 Pytorch 模型,保存了测试错误,并使用
torch.save(model, 'model.pt')
保存了完整的模型
我加载模型在另一个数据集上进行测试,发现误差较高,所以我在与之前完全相同的数据集上进行测试,发现结果不同:
这里,预测值没有太大差异,这告诉我模型是正确的,但有些不同。
第一个区别是模型最初是在 GPU 上使用 nn.DataParallel 进行训练的,在加载后进行测试时,我在 CPU 上对其进行评估。
model = torch.load('model.pt')
model = model.module # To remove the DataParallel module
model.eval()
with torch.no_grad():
x = test_loader.dataset.tensors[0].cuda()
pred = model(x)
mae_loss = torch.nn.L1Loss(reduction='mean')
mae = mae_loss(pred, y)
什么可能导致模型评估出现这种差异?先谢谢你了
也许您在加载后忘记将 pytorch 模型设置为 eval 模式(即 model.eval())?这会在运行推理之前将 dropout 和批量归一化层更改为评估模式。否则它会生成不一致的值,例如您的情况。