【发布时间】:2017-01-15 03:52:19
【问题描述】:
我很抱歉,因为我的问题可能听起来很愚蠢。但我在深度学习和 caffe 方面还很陌生。 我们如何检测在我们自己的数据集上微调预训练需要多少次迭代?例如,我正在为我自己的数据运行 fcn32,其中包含 5 个类。什么时候可以通过查看训练阶段的损失和准确率来停止微调过程?
非常感谢
【问题讨论】:
标签: deep-learning caffe pycaffe deeplearning4j
我很抱歉,因为我的问题可能听起来很愚蠢。但我在深度学习和 caffe 方面还很陌生。 我们如何检测在我们自己的数据集上微调预训练需要多少次迭代?例如,我正在为我自己的数据运行 fcn32,其中包含 5 个类。什么时候可以通过查看训练阶段的损失和准确率来停止微调过程?
非常感谢
【问题讨论】:
标签: deep-learning caffe pycaffe deeplearning4j
您不应该通过查看训练阶段的损失或准确性来做到这一点。从理论上讲,训练准确度应该始终在增加(也意味着训练损失应该始终在减少),因为您训练网络以减少训练损失。但训练准确率高并不一定意味着测试准确率高,这就是我们所说的过拟合问题。因此,您需要找到测试集(或验证集,如果有的话)的准确性停止增加的点。您可以通过首先指定相对较大的迭代次数来简单地做到这一点,然后监控测试准确度或测试损失,如果测试准确度在一致的 N 次迭代(或时期)中停止增加(或损失停止减少),其中 N可以是 10 或您指定的其他数字,然后停止训练过程。
【讨论】:
最好的办法是跟踪训练和验证的准确性,并存储每 k 次迭代的权重快照。要计算验证准确度,您需要拥有一组不用于训练的独立数据。 然后,一旦验证准确度停止增加或开始减少,您就可以停止。这在文献中被称为早期停止。例如,Keras 为此提供了功能:https://keras.io/callbacks/#earlystopping
此外,绘制上述数量是一种很好的做法,因为它可以让您深入了解训练过程。请参阅 http://cs231n.github.io/neural-networks-3/#accuracy 以获得精彩的说明(并非特定于提前停止)。
希望对你有帮助
【讨论】:
通常,您会收敛到模型的特定验证准确度。在实践中,如果验证损失在 x 个时期内没有增加,您通常会停止训练。根据您的纪元持续时间,x 可能最常见地在 5 到 20 之间变化。
编辑:
一个时期是对您的数据集的一次迭代,用于在 ML 术语中进行训练。您似乎没有验证集。通常,数据会分为训练数据和验证数据,因此您可以查看模型在看不见的数据上的执行情况,并通过查看这些数据来决定采用哪个模型。您可能想查看http://caffe.berkeleyvision.org/gathered/examples/mnist.html 以了解验证集的用法,即使他们称其为测试集。
【讨论】:
Iteration 59100, loss = 51478.9 I0116 00:23:45.580317 13755 solver.cpp:244] Train net output #0: accuracy = 0.594269 I0116 00:23:45.580333 13755 solver.cpp:244] Train net output #1: loss = 73335.3 (* 1 = 73335.3 loss)。损失和准确率都有很大的波动。顺便说一句,你能解释一下你的时代是什么意思吗?再次感谢