我正在运行一个MLP来将一组值分类为10个不同的类。
简化下来,我有一个声纳,它给了我一个物体的400“读数”。每个读数都是1000个浮点值的列表。
我已经扫描了100个完整的对象,并希望对它们进行分类,并根据留一交叉验证来评估模型。
对于每个对象,我将数据拆分为99个对象的训练集和剩余对象的测试集。我将训练集(99个对象,99 * 400“读数”)输入MLP并使用测试集(1个对象,1 * 400“读数)进行验证。
我的问题是:我如何知道哪个训练时代用作最终的“最佳”模型?我用Google搜索并且有人说使用具有最佳验证准确度的时代,但是这似乎是在欺骗我。我不应该只根据训练数据的统计数据选择一个模型吗? (我的思考过程是,训练中的随机重量重新调整可以创建一个人为的高验证准确度,实际上并不能为将来可以扫描的新对象提供有用的模型)
SO回答说使用提供最佳验证准确性的训练时代:
whats is the difference between train, validation and test set, in neural networks?
最佳, Deckwasher
答案 0 :(得分:1)
这称为提前停止。
您需要的是验证集。
- 在每个纪元后,计算您在验证集上的所需评估指标。
- 始终将最佳性能模型的参数保存在变量中的验证集中。
- 如果进行两次或n次迭代,则验证结果不会改善,停止时期并使用性能最佳的参数重置MLP。
- 然后使用您之前保存的验证集上性能最佳的模型计算测试集上的结果。
答案 1 :(得分:0)
您希望优化泛化/真实错误(我对未见数据的预测有多好),这通常包含(包括此概念的论文请参阅here;尽管在另一个背景 - > SGD + SVM):
您看, true-error 仅部分由您的优化错误(决定何时停止)描述,但良好的交叉验证方案可以更精确地描述/评估真实错误(这基本上是为什么要完成CV;需要付出一些代价)。因此,基于CV的时间选择是如此普遍。
当然,使交叉验证方案有点理智也非常重要。通常使用k值不小的k方案(至少在非NN应用中;对于NN来说可能成本太高)。
答案 2 :(得分:0)
决定何时停止的一种方法是评估测试集(或验证集)的准确性,并在每个纪元后打印。一旦达到最大纪元,你可以阻止它。
另一种方法是pickle(在python中)或序列化(在Java中)并在文件或磁盘中存储权重和偏差集,如果当前权重和偏差的精度优于当前最大值。