这是我的预测功能。这有什么问题吗?预测并不稳定,每次我运行相同的数据时,我都会得到不同的预测。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)
2 回答
智慧大石
TA贡献1946条经验 获得超3个赞
正如Usman Ali建议的那样,您需要eval
通过调用将模型设置为模式
model.eval()
在你的prediction
功能之前。
什么eval
模式:
将模块设置为评估模式。
这仅对某些模块有任何影响。请参阅特定模块的文档以了解其在训练/评估模式下的行为的详细信息,如果它们受到影响,例如 Dropout、BatchNorm 等。
当您完成预测并希望继续训练时,不要忘记通过调用将模型重置为训练模式
model.train()
模型中有几层可能会将随机性引入网络的前向传播。一个这样的例子是dropout层。辍学层随机“丢弃”p
其神经元的百分比以增加模型的泛化性。
此外,BatchNorm(以及可能的其他自适应归一化层)跟踪数据的统计信息,因此在train
模式或eval
模式中具有不同的“行为”。
添加回答
举报
0/150
提交
取消