使用 Tensorflow 训练神经网络时避免过度拟合
Avoiding overfitting while training a neural network with Tensorflow
我正在使用 Tensorflow 的对象检测 API 训练神经网络来检测汽车。我使用以下 youtube 视频来学习和执行该过程。
https://www.youtube.com/watch?v=srPndLNMMpk&t=65s
他的系列的第 1 部分到第 6 部分。
现在在他的视频中,他提到当损失值平均达到 ~1 或以下时停止训练,并且大约需要 10000 步左右。
就我而言,现在是 7500 步,损失值一直在 0.6 到 1.3 之间波动。
很多人在评论部分抱怨这个系列的误报,但我认为这是因为不必要的长时间训练过程(因为他们不知道什么时候停止?)导致过度拟合!
我想避免这个问题。我想要的不是最优化的权重,而是相当优化的权重,同时避免错误检测或过度拟合。我也在观察 Tensorboard 的 'Total Loss' 部分。它在 0.8 到 1.2 之间波动。我什么时候停止训练过程?
我也想知道,一般来说,'stopping of training'取决于哪些因素?它总是关于平均损失 1 或更少吗?
附加信息:
我的训练数据有 ~300 张图像
测试数据~20张图片
由于我使用的是迁移学习的概念,所以我选择了ssd_mobilenet_v1.model。
Tensorflow 版本 1.9(在 CPU 上)
Python 版本 3.6
谢谢!
您应该使用不同于训练集和测试集的验证测试。
在每个时期,您计算训练集和验证集的损失。
如果验证损失开始增加,请停止训练。您现在可以在您的测试集上测试您的模型。
验证集大小通常与测试集大小相同。例如,训练集为 70%,验证集和测试集均为 15%。
另请注意,您的数据集中的 300 张图像似乎不够。你应该增加它。
关于您的其他问题:
损失是您的错误总和,因此取决于问题和您的数据。在这方面,损失 1 并不意味着什么。永远不要依赖它来停止你的训练。
我正在使用 Tensorflow 的对象检测 API 训练神经网络来检测汽车。我使用以下 youtube 视频来学习和执行该过程。
https://www.youtube.com/watch?v=srPndLNMMpk&t=65s
他的系列的第 1 部分到第 6 部分。
现在在他的视频中,他提到当损失值平均达到 ~1 或以下时停止训练,并且大约需要 10000 步左右。
就我而言,现在是 7500 步,损失值一直在 0.6 到 1.3 之间波动。
很多人在评论部分抱怨这个系列的误报,但我认为这是因为不必要的长时间训练过程(因为他们不知道什么时候停止?)导致过度拟合!
我想避免这个问题。我想要的不是最优化的权重,而是相当优化的权重,同时避免错误检测或过度拟合。我也在观察 Tensorboard 的 'Total Loss' 部分。它在 0.8 到 1.2 之间波动。我什么时候停止训练过程?
我也想知道,一般来说,'stopping of training'取决于哪些因素?它总是关于平均损失 1 或更少吗?
附加信息: 我的训练数据有 ~300 张图像 测试数据~20张图片
由于我使用的是迁移学习的概念,所以我选择了ssd_mobilenet_v1.model。
Tensorflow 版本 1.9(在 CPU 上) Python 版本 3.6
谢谢!
您应该使用不同于训练集和测试集的验证测试。
在每个时期,您计算训练集和验证集的损失。 如果验证损失开始增加,请停止训练。您现在可以在您的测试集上测试您的模型。
验证集大小通常与测试集大小相同。例如,训练集为 70%,验证集和测试集均为 15%。
另请注意,您的数据集中的 300 张图像似乎不够。你应该增加它。
关于您的其他问题: 损失是您的错误总和,因此取决于问题和您的数据。在这方面,损失 1 并不意味着什么。永远不要依赖它来停止你的训练。