对于深度学习中训练集(train set)验证集(validation set)和测试集(test set)的理解

实验中网络训练集,测试集,验证集的功能

本文用两个流程图来解释如何更好的区分训练集验证集以及测试集的功能



前言

在深度学习的深坑中,刚入手的小伙伴们做实验的时候会傻傻分不清楚训练集,测试集和验证集到底该在实验的哪一部分使用,功能是什么,所有就写了这篇博文,供自己学习也分享给大家


一、训练集验证集和测试集的理论解释

很多机器学习过程实际上就是选择模型,由于模型只是参数未知,所以就需要得到一个最优参数,使得模型可以比较准确的描述自变量到因变量的变化情况。对于模型的训练和度量,就需要用到已知的数据集。

数据集一般分为以下3种。如果已经有了一个大的标注数据集,那么通过随机抽样获得三种数据集,三者的比例为8:1:1。如果有标注的话,也可以只随机抽样出训练集和验证集。如果无标注,就用作训练集。

通常的方法就是先训练训练集,即最小化代价函数,然后再把测试集代入代价函数看看效果如何。

1.训练集
确定模型后,用于训练参数,注意训练的是普通参数(每多加入一个数据对模型进行训练,模型中就会受到影响的参数,通过多次迭代不断更新,是一个梯度下降的过程)而不是超参数(超参数是指训练开始之前设置的参数,超参数的选择与训练过程实际上是独立的,训练过程不会影响超参数。但是训练结束后可以根据训练结果考虑超参数是否可优化,可优化的话就调整超参数的值开始下一次训练)

PS:参数分为普通参数和超参数,在不引入强化学习的前提下普通参数可以被梯度下降更新,也就是训练参数。另外就是超参数的概念,比如网络节点数,网络层数,学习率,迭代次数等等。这些不在梯度下降的参数更新的范围内。

2.验证集(交叉验证集CV)
验证集基本是在每个epoch完成后,用来测试一下当前模型的准确率,不是训练模型的参数。

从狭义上来讲,验证集是没有参与梯度下降的过程,也就是说没有经过训练,但从广义上来说,验证集却参与了一个“人工调参”的过程,根据验证集的结构调整了迭代数,学习率等等,使得在验证集上最优。因此也可以说验证集也参与了训练。

3.测试集
虽然验证集没有对模型的参数产生影响,但是我们却根据验证集的测试结果的准确度来调整超参数,所以验证集对结果还是有影响的,即使得模型在验证集上达到最优。就是在很多个模型中,验证集选择了代价函数最小的一个模型。虽然在这个模型上代价很小,但并不代表在其他数据上代价也小。所以需要一个完全没有经过训练的测试集来再最后测试模型的准确率。由于验证集和测试集没有交集。所以这个准确率是准确的。

二、流程图解释

1.在论文Convolutional Neural Networks for Recognition of Lymphoblast Cell Images中的流程图

细胞图片分为三部分,训练集测试集和验证集,我们使用训练集中的数据训练ConVNet,以在三个卷积子层中找到合适的滤波器权重,并在两个完全连接的层中找到最小误差的权重。接下来,我们使用验证集中的数据评估ConVNet,以获得验证误差和交叉熵损失。然后,我们使用从原始121个训练图像的数据扩充中创建的新训练集再次训练ConVNet。我们以相同的过程重复ConVNet的训练,直到完成50个纪元。最后,我们使用测试集中的数据评估ConVNet的性能。
在这里插入图片描述

2.实际应用中

一般只分为训练集和测试集
以对腹部CT图像中肺部肿瘤分割为例,流程图自己画的,哪里不对积极改正
在这里插入图片描述

总结

训练集:学习样本数据集,通过匹配一些参数建立一个分类器,主要是用来训练模型的。

验证集:对学习出来的模型,调整超参数。

测试集:测试集训练好的模型的准确率

### 深度学习中的数据集划分 在深度学习项目中,合理的数据集划分至关重要。这不仅影响模型的学习效果,也决定了其泛化能力。 #### 数据集的作用 - **训练集 (Training Set)** 是用于训练模型的部分,在这一阶段,算法通过调整参数来最小化损失函数[^1]。 - **验证集 (Validation Set)** 主要用来调节超参数以及防止过拟合现象的发生。它帮助开发者监控模型性能,并据此做出必要的改进措施[^2]。 - **测试集 (Test Set)** 的目的是提供一个独立的评估环境,以衡量最终模型的真实表现。这部分数据在整个开发周期内保持未被触及的状态直到最后一步才使用[^3]。 #### 常见的划分比例 针对不同规模的数据集,存在多种推荐的比例方案: - 对于传统机器学习任务(大约一万条记录级别),建议采用如下几种方式之一: - 训练集测试集按7:3或8:2分割; - 更加精细的做法则是采取6:2:2作为训练/验证/测试三者的比率。 - 当面对较小尺寸的数据集合时(几千至数万之间),则倾向于遵循60%训练、20%验证及剩余20%留作测试的原则。 - 大型数据集中,一种流行的选择是以8:1:1的方式来进行分配,即大部分资源投入到了训练过程之中,而少量保留给验证测试用途。 ```python from sklearn.model_selection import train_test_split # Example of splitting dataset into training, validation and test sets with a ratio of 8:1:1 train_data, temp_data = train_test_split(dataset, test_size=0.2, random_state=42) validation_data, test_data = train_test_split(temp_data, test_size=0.5, random_state=42) print(f"Train size: {len(train_data)}, Validation size: {len(validation_data)}, Test size: {len(test_data)}") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值