昨天一直在想验证集和测试集的问题,越想越迷…
  
  
   问题是这样的,大部分网络的训练都是这么一个套路:训练迭代 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)。
一、训练集、
  
   验证集
  
  、
  
   测试集
  
  之间的
  
   区别
  
  及其作用
训练集:用于模型拟合的数据样本,即用于训练的样本集合,主要用来训练神经网络中的参数,
验证...