作者:Slav Ivanov
翻译:吴金笛
校对:丁楠雅
本文约4400字,建议阅读12分钟。
本文列举了在搭建神经网络过程中的37个易错点,并给出了解决建议。
有一个网络已经训练了12个小时。一切看起来都很好:梯度是逐渐变化的,损失在减少。但接下来的预测:都是零,所有的图像背景都没有被检测到。“我做错了什么?”——我问我的电脑,但它没有回答我。
你从哪里开始检查是否你的模型输出了垃圾(例如,预测输出了平均值,或者它的准确性真的很差)?
由于许多原因,神经网络可能不会进行训练。在许多调试过程中,我经常发现自己在做同样的检查。我把我的经验和最好的想法整理在这个便利的列表中,希望它们对你也有用。
目录
1. 如何使用本指南?
2. 数据集问题
3. 数据规范化或增强的问题
4. 实现问题
5. 训练问题
1.如何使用本指南?
很多方面都可能出错。但是其中一些比其他的更有可能被防范。我通常从以下简短的清单开始,作为紧急的第一反应:1. 从一个已知适用于这类数据的简单模型开始(例如,图像的VGG)。如果可能,使用标准损失。
2. 关闭所有的附加功能,例如正则化和数据增强。
3. 如果对一个模型进行微调,要仔细检查预处理,因为它应该与原始模型的训练相同。
4. 验证输入数据是否正确。
5. 从一个非常小的数据集(2-20个样本)开始。对它进行过度拟合,并逐渐添加更多的数据。
6. 开始逐步添加所有被省略的部分:增强/正则化、自定义损失函数、尝试更复杂的模型。
如果上面的步骤没有解决问题,那就根据下面的列表逐一验证。
2.数据集问题
1.检查你的输入数据
检查你向网络输入的数据是否有意义。 例如,我不止一次搞混了图像的宽度和高度。 有时候,我会错误地输入全0数据。 或者我会一遍又一遍地使用相同的批次。 因此,打印/显示几批输入和目标输出,以确保它们是正确的。
2.尝试随机输入
尝试传入随机数而不是实际数据,看看错误是否相同。 如果是这样,这是一个确定的信号,说明你的网络在某个时候将数据转换为了垃圾。 试着一层一层或一个操作一个操作的调试看看哪里出错了。
3. 检查数据加载程序
你的数据可能没问题,但是将输入传递到网络的代码可能会出错。 在任何操作之前打印并检查第一