pytorch 预测稳定性

pytorch predictions stability

这是我的预测函数。这有什么问题吗?预测不稳定,每次我 运行 对相同的数据,我都会得到不同的预测。


def predict(model, device, inputs, batch_size=1024):
    model = model.to(device)
    dataset = torch.utils.data.TensorDataset(*inputs)
    loader = torch.utils.data.DataLoader(
                    dataset, 
                    batch_size=batch_size,
                    pin_memory=False
                )

    predictions = []

    for i, batch in enumerate(loader):
        with torch.no_grad():
            pred = model(*(item.to(device) for item in batch))
            pred = pred.detach().cpu().numpy()
        predictions.append(pred)
    return np.concatenate(predictions)

您已定义函数,但尚未训练模型。该模型在训练之前随机化预测,这就是您的不一致的原因。如果你设置了一个带有损失函数的优化器,并且 运行 超过多个时期,预测就会稳定下来。这 link 可能会有所帮助:https://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html。查看第 3 和 4 部分

通过调用

作为 suggested, you need to set your model to eval 模式
model.eval()

prediction 函数之前。

eval 模式的作用:

Sets the module in evaluation mode.

This has any effect only on certain modules. See documentations of particular modules for details of their behaviors in training/evaluation mode, if they are affected, e.g. Dropout, BatchNorm, etc.

当您完成预测并希望继续训练时,请不要忘记通过调用

将您的模型重置为训练模式
model.train()

模型中有多个层可能会在网络的前向传递中引入随机性。一个这样的例子是 dropout 层。一个 dropout 层 "drops" p% 的随机神经元以增加模型的泛化。
此外,BatchNorm(可能还有其他自适应归一化层)跟踪数据的统计信息,因此在 train 模式或 eval 模式下具有不同的 "behavior"。