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

时间:2018-08-23 13:34:28

标签: tensorflow machine-learning neural-network tensorboard training-data

我正在使用Tensorflow的对象检测API训练神经网络来检测汽车。我使用以下youtube视频来学习和执行该过程。

https://www.youtube.com/watch?v=srPndLNMMpk&t=65s

他的系列的第1至6部分。

现在,在他的视频中,他提到当损失值平均达到约1或以下并且将花费大约10000'ish'步时停止训练。

在我的情况下,现在是7500步,损耗值一直在0.6到1.3之间波动。

很多人在评论部分抱怨该系列的误报,但我认为发生这种情况的原因是不必要的长时间培训(因为他们不知道何时停止?),这会导致过拟合!

我想避免这个问题。我想要的不是最佳重量,而是相当最佳的重量,同时避免错误检测或过度拟合。我也在观察Tensorboard的“总损失”部分。它在0.8到1.2之间波动。我什么时候停止训练过程?

我也想大体上知道,“停止培训”取决于哪些因素?它是否总是平均损失1或更少?

其他信息: 我的训练数据有约300张图像 测试数据〜20张图像

由于我使用的是转移学习的概念,所以我选择了ssd_mobilenet_v1.model。

Tensorflow 1.9版(在CPU上) Python 3.6版

谢谢!

1 个答案:

答案 0 :(得分:2)

您应该使用不同于训练集和测试集的验证测试。

在每个时期,您都要计算训练和验证集的损失。 如果验证损失开始增加,请停止培训。现在,您可以在测试集上测试模型。

验证集大小通常与测试集相同。例如,训练集为70%,验证集和测试集均为15%。

此外,请注意,数据集中的300张图像似乎还不够。您应该增加它。

对于其他问题: 损失是错误的总和,因此取决于问题和数据。就此而言,损失1并不意味着太多。永远不要依靠它来停止训练。