训练集、验证集和测试集的区别
写这篇文章的原因
之前搞机器学习很久了,也总能看到验证集这三个字,而我自己的数据集一直都是由训练集和测试集组成。然后我的数据集划分成这样两个部分之后,在每一个epoch的时候,我都会用训练集训练,测试集做测试,同时我也一直认为验证集和测试集只是名字不同,但感觉实际上是一个东西。
直到最近,我感觉自己写 for 循环写每个 epochs 的过程的时候我总觉得自己的代码经常需要在这里改许多东西,于是就想把代码能不能封装一下,不要浪费时间在这上面,于是我搜了搜,发现了pytorch-lighting。但是在写刚开始写的过程中,我就发现在lighting中,需要你自己定义好training_step(self, batch, batch_idx)
、validation_step(self, batch, batch_idx)
和test_step(self, batch, batch_idx)
三个函数,然后在看这三个函数的时候才发现在每一个epoch会执行的是training_step
和validation_step
,然后在训练完成之后,才会执行test_step
,这时候我才恍然大悟,原来自己之前所谓的测试集其实是验证集。自己之前一直把验证集当测试集用,然后没有真正的测试集。
1.训练集
训练集的主要作用是用于拟合数据样本,用于训练模型,训练神经网络中的参数权重。
这是你提供给模型学习算法的主要数据。在训练过程中,模型将使用训练集中的数据进行学习和预测,并不断调整其内部参数以优化预测结果。
2.验证集
验证集的主要作用是在训练过程中对模型进行一个初步的评估,用于调整模型的超参数。同时也不断的监控训练过程是否正常。
验证集的主要用途是防止过拟合,并且帮助我们找到最优的模型参数。在训练过程中,模型会根据验证集的表现来调整超参数,以优化模型的性能。
3.测试集
测试集的主要作用是用于评估模型的性能,在训练过程中是不参与任何计算的,它是在模型训练完成之后,用来对模型进行一个全面的评估。
这是你用来评估模型在未见过的数据上的性能如何的数据集。在模型训练完成后,你可以使用测试集来测试模型的预测能力,并得到模型在未知数据上的性能评估结果。