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

Deep learning 我们如何知道何时停止在预先训练的模型上训练模型?,deep-learning,caffe,pycaffe,deeplearning4j,Deep Learning,Caffe,Pycaffe,Deeplearning4j,我很抱歉,因为我的问题可能听起来很愚蠢。但我对深度学习和caffe很陌生。 我们如何检测需要多少次迭代来微调在我们自己的数据集上预先训练的数据?例如,我为自己的数据运行fcn32,包含5个类。我什么时候可以通过查看培训阶段的损失和准确性来停止微调过程 非常感谢通常,您会收敛到模型的特定验证精度。在实践中,如果验证损失在x个时期内没有增加,您通常会停止培训。根据您的历元持续时间,x通常在5到20之间变化 编辑: epoch是trainig在数据集上的一次迭代,用ML表示。您似乎没有验证集。通常情况

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


非常感谢

通常,您会收敛到模型的特定验证精度。在实践中,如果验证损失在x个时期内没有增加,您通常会停止培训。根据您的历元持续时间,x通常在5到20之间变化

编辑:


epoch是trainig在数据集上的一次迭代,用ML表示。您似乎没有验证集。通常情况下,数据分为培训和验证数据,这样您就可以通过查看这些数据来查看模型在未看到的数据上的表现,并决定采用哪种模型。您可能希望查看验证集的使用情况,即使他们称之为测试集

你不应该只看训练阶段的损失或准确性。从理论上讲,训练精度应始终增加(也意味着训练损失应始终减少),因为您训练网络以减少训练损失。但高训练精度并不意味着高测试精度,这就是我们所说的过度拟合问题。因此,您需要找到一个点,测试集(或验证集,如果有的话)的准确性停止增加。您可以简单地通过首先指定相对较大的迭代次数来完成,然后监控测试精度或测试损失,如果测试精度在持续的N次迭代(或历次)中停止增加(或损失停止减少),其中N可以是10或您指定的其他数量,然后停止训练过程

最好的做法是跟踪训练和验证的准确性,并存储每k次迭代的权重快照。要计算验证精度,您需要有一组不用于培训的备用数据。 然后,您可以在验证精度停止增加或开始降低时停止。这在文献中被称为早期停车。例如,Keras提供了以下功能:

此外,绘制上述数量也是一种很好的做法,因为它可以让您深入了解培训过程。请参阅,以获得一个很好的说明(不特定于提前停止)


希望这有帮助

非常感谢您的评论。我分了两组(一列和另一列)。例如,我在我的数据集上运行FCN32,类的数量不平衡。损耗和精度波动`迭代58150,损耗=26238.5列车净输出#0:精度=0.796127列车净输出#1:损耗=47338.7迭代58150,lr=1e-10迭代58200,损耗=70063.6列车净输出#0:精度=0.592117列车净输出#1:损耗=74425.9`。58200次迭代后这正常吗?我怎样才能想象测试阶段的准确度和损失?我自己从来不使用FCN32。但是您发布的损失似乎是错误的,它太大了,并且随着迭代的增加而增加。所以你的代码一定有问题。非常感谢你的帮助。我为列车阶段添加了损耗层和精度层。精度和损耗都在波动。我的训练有什么问题吗?再次感谢您的回复。请告诉我哪一个是验证损失,哪一个是训练损失
迭代59100,损失=51478.9 I0116 00:23:45.580317 13755解算器。cpp:244]训练净输出35; 0:accurity=0.594269 I0116 00:23:45.580333 13755解算器。cpp:244]训练净输出#1:loss=73335.3(*1=73335.3损失)
。损失和准确度都有很大的波动。顺便说一句,你能解释一下你所说的时代是什么意思吗?再次感谢