我正在使用Tensorflow的对象检测API训练一个神经网络来检测汽车。我通过观看以下YouTube视频学习并执行了这一过程。
https://www.youtube.com/watch?v=srPndLNMMpk&t=65s
这是他系列视频的第1到6部分。
在他的视频中,他提到当损失值平均达到约1或以下时应停止训练,并且这将需要大约10000步左右。
在我这里,现在是7500步,损失值在0.6到1.3之间波动。
很多人在评论区抱怨这个系列的误报问题,但我认为这是因为训练过程不必要地延长了(可能是因为他们不知道何时停止?),这导致了过拟合!
我想避免这个问题。我希望得到的不是最优权重,而是相当优化的权重,同时避免误检或过拟合。我也在观察Tensorboard的“总损失”部分,它在0.8到1.2之间波动。我应该在什么时候停止训练过程?
我还想一般性地了解,停止训练的决定因素是什么?是否总是关于平均损失达到1或更低?
附加信息:我的训练数据有约300张图片,测试数据有约20张图片
由于我使用了迁移学习的概念,我选择了ssd_mobilenet_v1模型。
Tensorflow版本1.9(在CPU上)Python版本3.6
谢谢!
回答:
你应该使用一个与训练集和测试集不同的验证集进行测试。
在每个周期,你计算训练集和验证集的损失。如果验证集的损失开始增加,就停止你的训练。现在你可以用测试集测试你的模型了。
验证集的规模通常与测试集相同。例如,训练集占70%,验证集和测试集各占15%。
另外,请注意你的数据集中只有300张图片似乎不够。你应该增加数据量。
关于你的另一个问题:损失是你的错误总和,因此,依赖于问题和你的数据。损失值为1在这方面并不意味着什么。永远不要依赖它来停止你的训练。