使用Tensorflow训练神经网络时避免过拟合

我正在使用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在这方面并不意味着什么。永远不要依赖它来停止你的训练。

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注