计算机视觉实践(街景字符编码识别)Vol4

Task04:模型训练与验证

搭建好CNN网络之后,为了完成深度学习的基本训练流程,应该设置训练集和验证集,并最终在测试机上测试模型的表现。三个数据集的作用如下:

训练集(Train Set):模型用于训练和调整模型参数;
验证集(Validation Set):用来验证模型精度和调整模型超参数;
测试集(Test Set):验证模型的泛化能力。

在训练集上进行计算,不断更新神经网络参数;在验证集上验证,用于调整模型的复杂度,避免过拟合的现象。在训练的过程中应该不断记录训练误差以及在验证集上的验证误差。随着训练过程的进行,模型的复杂度上升,训练误差会越来越小,但是在验证集上,验证误差开始阶段会逐步降低,但是当模型过于复杂的时候,验证误差开始增大,模型的泛化能力减弱。这种现象可以通过下图说明:
在这里插入图片描述
所以应该根据记录的模型误差用于调整参数,并在训练结束之后保存最优的权重,以便于下次模型调用的时候使用。

一般来说,训练集和验证集的数据遵循独立同分布的原则。为了保证这一点,通常将提供的数据按照一定的比例随机划分成训练集和验证集两份。常用的划分方式有如下三种:

  • 留出法(Hold-out)
    直接将训练集划分成两部分,新的训练集和验证集。这种划分方式的优点是最为直接简单;缺点是只得到了一份验证集,有可能导致模型在验证集上过拟合。留出法应用场景是数据量比较大的情况。
    留出法
  • 交叉验证法(CrossValidation,CV)
    将训练集划分成K份,将其中的K-1份作为训练集,剩余的1份作为验证集,循环K训练。这种划分方式是所有的训练集都是验证集,最终模型验证精度是K份平均得到。这种方式的优点是验证集精度比较可靠,训练K次可以得到K个有多样性差异的模型;CV验证的缺点是需要训练K次,不适合数据量很大的情况。
    交叉验证法
  • 自助采样法(BootStrap)
    通过有放回的采样方式得到新的训练集和验证集,每次的训练集和验证集都是有区别的。这种划分方式一般适用于数据量较小的情况。
    自助采样法
    为了在Pytorch中实现训练和验证过程,首先依然是需要封装训练集和验证集的数据容器
train_loader = torch.utils.data.DataLoader(
    train_dataset,
    batch_size=10, 
    shuffle=True, 
    num_workers=0, 
)
    
val_loader = torch.utils.data.DataLoader(
    val_dataset,
    batch_size=10, 
    shuffle=False, 
    num_workers=0, 
)

每训练完一个epoch,记录验证集精度。

model = SVHN_Model1(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值