这段时间在做一个实验,但是由于数据集较小,所以我就只分了训练集和验证集(相当于把测试集当成验证集用了),由于没有真正意义上的测试集,所以做完实验之后开始怀疑自己,这样做真的对吗?没有真正意义上的测试集我这样做出来的实验具有说服力吗?
后来去学习了一下验证集和测试集的区别,总的学习之后的结果就是验证集是用于训练过程中的调参,通过验证误差和验证精度等去调整模型的超参数,而测试集是用来评估模型,计算数据的泛化误差(越接近真实环境标签,泛化误差越小,相应的模型越好)
验证集的功能包括:
❑据验证集的性能表现来调整学习率、权值衰减系数、训练次数等。
❑ 根据验证集的性能表现来重新调整网络拓扑结构。
❑ 根据验证集的性能表现判断是否过拟合和欠拟合。
通过查看验证集手动或者自动调整超参数,让模型的验证集损失越来越小,从而不断的接近真实值,所以这样的话验证集是不能代替测试集的功能的。验证集可以多测使用,用来反馈模型的状况,而测试集只能用一次。
模型的评估一般使用:
loss,accuracy = model.evaluate(X_test,Y_test)
or
loss,accuracy = model.evaluate(db_test)
但是我又一个疑惑始终不解,我在训练过程中并没有去改变超参数,相当于让模型从头开始训练,而不是改变超参数之后继续训练模型,那这样的的验证集岂不是相当于测试集去评估模型的好坏了吗?(现在还是不解,求知道的大佬告知)
相关的学习可以参考:
https://zhuanlan.zhihu.com/p/48976706
《TensorFlow深度学习》书