昨天一直在想验证集和测试集的问题,越想越迷…
问题是这样的,大部分网络的训练都是这么一个套路:训练迭代 n 个 epoch 以后就进行一次验证,然后网络会输出在验证集上的 loss 或者其他评价指标。
所以如果我直接把测试集作为验证集,不就可以看到每隔 n 个 epoch 模型在测试集上的表现了嘛?而且训练结束前的最后一次验证也就相当于测试了,反正验证集又不会被训练,这样还省的做测试了。
=============== 查资料后的一点理解 =================
参考文章:https://blog.csdn.net/JNingWei/article/details/78170171
首先验证集是不参与梯度下降的过程的,所以我想那么做也是可以,只是和使用验证集的初衷不一样了(其实就是没理解验证集在干嘛,还说的那么好听 😦)。
验证集的作用:
使用验证集是为了
快速调参
,也就是用验证集选择超参数(网络层数,网络节点数,迭代次数,学习率这些)。另外用验证集还可以监控模型是否异常(过拟合啦什么的),然后决定是不是要提前停止训练。
验证集的关键在于
选择超参数
,我们手动调参是为了让模型在验证集上的表现越来越好,如果把测试集作为验证集,调参去拟合测试集,就有点像作弊了。
而测试集既
不参与参数的学习过程
,也
不参与参数的选择过程
,仅仅用于模型评价。
验证集的正确打开方式:
验证集可以看做参与了
“人工调参”
的训练过程
一般训练几个 epoch 就跑一次验证看看效果(大部分网络自带这个功能)
这样做的第一个好处是:可以及时发现模型或者参数的问题,比如模型在验证集上发散啦、出现很奇怪的结果啦(Inf)、mAP不增长或者增长很慢啦等等情况,这时可以及时终止训练,重新调参或者调整模型,而不需要等到训练结束。
另一个好处是验证模型的泛化能力,如果在验证集上的效果比训练集上差很多,就该考虑模型是否过拟合了。同时,还可以通过验证集对比不同的模型。
简单说,训练集就是用来训练模型用的,
验证集
为了验证模型的效果,
测试集
用来最终评测。所以基于这个,那训练数据的时候,就不要使用
验证集
和
测试集
的相关信息,包括统计均值方差特征等,但是
验证集
可以在模型训练过程中进行模型调参,就是手动调一些外部参数,像是epoch、learningrate、dropoutprob等。
详细介绍下,参考:https://blog.csdn.net/ytusdc/article/details/86488537
训练集(train set)——...
其中,Ytrain为正确的标签,y_score为输出概率值,thresholds1为阈值,当 y_score>thresholds1时预测为正样本;随机将样本划分为训练集(70%)和
测试集
(30%),用训练集训练模型,用
测试集
验证模型及参数。接着再把样本打乱,重新选择训练集和
测试集
,继续训练模型和验证模型。将样本随机划分为K个大小相同的互斥的子集,每次选K-1个作为训练集,剩的那个作为
测试集
。,可以考虑划分为训练集(60%)、
验证集
(20%)、
测试集
(20%);,
验证集
和
测试集
都留1W即可;
训练集、
验证集
和
测试集
这三个名词在
机器学习
领域极其常见,但很多人并不是特别清楚,尤其是后两个经常被人混用。
在有监督(supervise)的
机器学习
中,数据集常被分成2~3个,即:训练集(train set),
验证集
(validation set),
测试集
(test set)。
Ripley, B.D(1996)在他的经典专著Pattern Recognition and Neura...
Ripley 的著作《模式识别与神经网络》(Pattern Recognition and Neural Networks)中,训练集、
验证集
和
测试集
的定义如下:
训练集:用来学习的样本集,用于分类器参数的拟合。
验证集
:用来调整分类器超参数的样本集,如在神经网络中选择隐藏层神经元的数量。
测试集
:仅用于对已经训练好的分类器进行性能评估的样本集。
验证集
和
测试集
的
区别
验证集
和
测试集
的对比
验证集
的作用:
使用
验证集
是为了快速调参,也就是用验证
在对
机器学习
算法进行学习和实践的时候,我们经常会遇到“
验证集
”和“
测试集
”,通常的
机器学习
书籍都会告诉我们,
验证集
和
测试集
不相交,
验证集
和训练集不相交,
测试集
和训练集不相交。也就是
验证集
与
测试集
似乎是同一级的东西,那么我们自然而然会有一个困惑为什么还要分
测试集
和
验证集
呢?
其实问题的答案是:训练集用于训练模型参数,
测试集
用于估计模型对样本的泛化误差,
验证集
用于“训练”模型的超参数。
什么是模型的参数
我们知道一个
机器学习
模型通常包括两个部分的参数:模型参数和超参数。其中超参数是用于控制模型行为的参数,这些参
训练集(train set)、
验证集
(validation set)与
测试集
(test set)之间没有交集。在常用的交叉验证中,我们先把数据中一小部分割出来作为
测试集
,留着不碰。剩下的分成n份,在n次循环中,第n份做验证机,除第n份以外的作为训练集,记录下每次循环的验证成果并求平均值,以验证成果的平均值作为调超参数(hyperparameter)的依据。
在整个过程中:
训练集用于炼丹(fit),本质是用算法反复修改模型(model)的参数(parameter),比如
深度学习
里常见的权重(weight)
实际上
验证集
和
测试集
在大部分情况下没有太多
区别
,对于
深度学习
模型来说的话,超参数的影响可能不会有传统
机器学习
那么大了,所以在
深度学习
领域
验证集
没有很多人谈到。
区别
是这样的:
模型在初步的训练结束后,还想要尝试调整不同的超参数组合(比如:隐藏层的大小,学习率,dropout之类的),这个时候我们把数据分割成训练集,
验证集
和
测试集
。
我们使用训练集进行训练每个超参数组合下的模型,这样模型虽然是同一类的但是其参数不一,然后对每一个超参数组合都是用
验证集
来查看模型的准确率,并且最终选择
验证集
准确率最高的超参
训练集、
测试集
、
验证集
之间的
区别
及理解
在写代码时,数据集的划分时常影响我们的准确率,好的数据集划分一般分为训练集(training set),
验证集
(development set/validation set)和
测试集
(test set)。
一、训练集、
验证集
、
测试集
之间的
区别
及其作用
训练集:用于模型拟合的数据样本,即用于训练的样本集合,主要用来训练神经网络中的参数,
验证...