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"。
这是我的预测函数。这有什么问题吗?预测不稳定,每次我 运行 对相同的数据,我都会得到不同的预测。
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 部分
通过调用
作为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"。