模型训练与验证

模型训练与验证

网络模型构建好后,需要利用训练数据不断进行学习训练来降低loss 提高模型性能 使得最后得到的结果误差尽可能小,尽可能满足需要
一个成熟合格的深度学习训练流程应该具备:
·1、在训练集上进行训练并在验证集上进行验证
2、模型可以保留最优权重,并读取权重
3、记录下训练集和验证集的精度,便于调参

构建验证集

训练过程是容易出现过拟合的,也就是模型过多的学习了数据比较细枝末节的特征,而不是该类的特征,即不具备普遍性的特征,此时模型就会出现过拟合现象
而在训练过程中要保证模型的改变不接触测试集数据,来防止对测试集数据出现过拟合现象。这时候就需要验证集来验证模型的精度
过拟合和欠拟合的示意图如下图所示:

在这里插入图片描述
为了过拟合问题,可以通过构建验证集的方法来减少过拟合现象

使用训练集对模型进行训练及调参,使用验证集用来模型精度及调整模型超参数,使用测试集用来验证模型的泛化能力
验证集的划分方法:
1、留出法 直接将训练集划分成两部分 缺点:仅有一份验证集,会可能出现验证集过拟合
2、交叉验证法 分成k份 k-1份作为训练集,1份作为验证集,模型验证精度是k份平均,优点是验证集精度可靠,缺点是训练k次
3、自助采样
通过有放回的采样方式得到新的训练集和验证集

验证和训练
迭代进行 采用上章写好的代码(修改一下改成使用gpu 只用cpu的话训练速度太慢了)

数据读取代码:

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,
)
model = SVHN_Model1()
criterion = nn.CrossEntropyLoss (size_average=False)
optimizer = torch.optim.Adam(model.parameters(), 0.001)
best_loss = 1000.0
for epoch in range(20):
	print('Epoch: ', epoch)
	train(train_loader, model, criterion, optimizer, epoch)
	val_loss = validate(val_loader, model, criterion)
# 记录下验证集精度
if val_loss < best_loss:
	best_loss = val_loss
	torch.save(model.state_dict(), './model.pt')
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值