在模型的训练过程中,模型训练误差逐渐降低,但是模型泛化效果较差,这种现象称为过拟合。所以为了提高模型的泛化能力,我们可以构建一个验证集来验证精度。
模型训练与验证
构建训练集和验证集
train_loader = torch.utils.data.DataLoader(
train_dataset,
batch_size=10,
shuffle=True,
num_workers=10,
)
val_loader = torch.utils.data.DataLoader(
val_dataset,
batch_size=10,
shuffle=False,
num_workers=10,
)
训练时每轮进行训练和验证
训练时进行训练和验证
for epoch in range(20):
print('Epoch: ', epoch)
train(train_loader, model, criterion, optimizer, epoch)
val_loss = validate(val_loader, model, criterion)
训练和验证时要切换模型模式
model.eval() #pytorch会把BN和DropOut固定住,不会取平均,而使用训练好的值。在模型测试阶段使用
model.train() #让model变成训练模式,此时dropout和batch normalization的操作在训练起到防止网络过拟合的问题。
模型保存与加载
# 保存和加载整个模型
torch.save(model_object, 'model.pkl')
model = torch.load('model.pkl')
# 仅保存和加载模型参数(推荐使用)
torch.save(model_object.state_dict(), 'params.pkl')
model_object.load_state_dict(torch.load('params.pkl'))
模型调参流程

网友评论