我正在运行一个MLP来将一组值分类为10个不同的类。
简化下来,我有一个声纳给我400个“读数”的一个物体。每次读取都是一个包含1000个浮动值的列表。
我已经扫描了100个对象,并希望对它们进行分类,并根据保留一次交叉验证对模型进行评估。
对于每个对象,我将数据分成一个由99个对象组成的训练集和一个其余对象的测试集。我将训练集(99对象,99*400“读数”)输入MLP,并使用测试集(1对象,1*400“读数)进行验证。
我的问题是:如何知道应该使用哪个训练时代作为最终的“最佳”模型?我在谷歌上搜索了一下,有些人说使用的时代具有最好的验证精度,但对我来说,这似乎是作弊。我不应该仅仅根据培训数据的统计数据来选择一个模型吗?(我的思维过程是,在训练中随机调整权重可以创造一个人工高的验证精度,实际上并不能为将来可能被扫描的新对象提供有用的模型)
因此,要使用提供最佳验证准确性的培训时代,请回答:
最好的,甲板垫圈
发布于 2016-06-03 04:42:53
这叫“早停”。
您需要的是一个验证集。
-After每个时代,计算您想要的评估措施之上的验证集。
-Always将性能最好的模型的参数保存在变量中。
对于-If两次或n次迭代,验证结果没有改进,停止了历次迭代,并用性能最好的参数重置了MLP。
-Then使用之前保存的性能最好的验证集模型计算测试集上的结果。
发布于 2016-06-01 20:29:49
您希望优化您的generalization/true-error (我对未见数据的预测有多好),它通常由以下内容组成(包括此概念的纸质这里;尽管在另一个上下文中-> SGD + SVM):
您可以看到,真错误仅部分地由您的优化错误(决定何时停止)来描述,但是对于真实错误的描述/评估,一个好的交叉验证方案可以更加精确(这就是为什么要做CV;需要付出一定的代价)。因此,基于CV的选择时代是如此普遍。
当然,让交叉验证方案变得更加合理也是非常重要的。基于k折叠的方案通常使用不太小的k(至少在非NN应用中是这样;对NNs来说可能太昂贵)。
发布于 2016-06-02 10:40:44
决定何时停止的一种方法是评估测试集(或验证集)的准确性,并在每个时代之后打印出来。一旦达到最大的时代,你就可以阻止它。
另一种方法是(在python中)或序列化(在Java中),并将一组权重和偏差存储在文件或磁盘中,如果当前权重和偏差的准确性优于当前最大值的话。
https://stackoverflow.com/questions/37577891
复制相似问题