我们如何知道何时停止在预训练模型上训练模型?

时间:2017-01-15 03:52:19

标签: deep-learning caffe pycaffe deeplearning4j

我的道歉,因为我的问题可能听起来很愚蠢。但我在深度学习和咖啡方面都很陌生。 我们如何检测需要多少次迭代来微调我们自己的数据集上的预训练?例如,我正在为5个类的自己的数据运行fcn32。我什么时候可以通过观察训练阶段的损失和准确性来停止微调过程?

非常感谢

3 个答案:

答案 0 :(得分:5)

你不应该通过观​​察训练阶段的损失或准确性来做到这一点。从理论上讲,训练准确性应该始终在增加(也就是说训练损失应该总是在减少),因为你训练网络以减少训练损失。但是,高训练精度并不意味着高测试精度,这就是我们所说的过度拟合问题。因此,您需要找到的是测试集(或验证集,如果有)的准确性停止增加的点。您可以通过首先指定相对较大的迭代次数来执行此操作,然后监视测试准确度或测试损失,如果测试精度在一致的N次迭代(或时期)中停止增加(或损失停止减少),其中N可以是10或您指定的其他号码,然后停止培训过程。

答案 1 :(得分:3)

通常,您会收敛到模型的特定验证准确度。实际上,如果x时代的验证损失没有增加,你通常会停止训练。根据您的纪元持续时间,x可能会在5到20之间变化。

编辑:

一个纪元是用ML术语训练你的数据集的一次迭代。您似乎没有验证集。通常情况下,数据会被分成训练和验证数据,这样您就可以看到模型对看不见的数据的执行情况,并通过查看此数据来决定采用哪种模型。您可能需要查看http://caffe.berkeleyvision.org/gathered/examples/mnist.html以查看验证集的用法,即使它们将其称为测试集。

答案 2 :(得分:3)

最好的办法是跟踪训练和验证的准确性,并在每k次迭代中存储权重的快照。要计算验证准确性,您需要拥有一组保留数据,这些数据不用于培训。 然后,一旦验证准确度停止增加或开始减少,您就可以停止。这被称为文献中的早期停止。例如,Keras为此提供了以下功能:https://keras.io/callbacks/#earlystopping

此外,优秀的做法是绘制上述数量,因为它可以为您提供有关培训过程的重要见解。请参阅http://cs231n.github.io/neural-networks-3/#accuracy以获得精彩的插图(并非特定于提前停止)。

希望这有帮助