本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

报码:训练的神经网络不工作?一文带你跨过这37个坑

时间:2017-07-25 19:25来源:118图库 作者:www.wzatv.cc 点击:
参与:黄小天、Smith 近日,Slav Ivanov 在 Medium 上发表了一篇题为《37 Reasons why your Neural Network is not working》的文章,从四个方面(数据集、数据归一化/增强、实现、训练),对自己长

参与:黄小天、Smith

近日,Slav Ivanov 在 Medium 上发表了一篇题为《37 Reasons why your Neural Network is not working》的文章,从四个方面(数据集、数据归一化/增强、实现、训练),对自己长久以来的神经网络调试经验做了 37 条总结,并穿插了不少出色的个人想法和思考,希望能帮助你跨过神经网络训练中的 37 个大坑。机器之心对该文进行了编译,原文链接请见文末。

神经网络已经持续训练了 12 个小时。它看起来很好:梯度在变化,损失也在下降。但是预测结果出来了:全部都是零值,全部都是背景,什么也检测不到。我质问我的计算机:「我做错了什么?」,它却无法回答。

如果你的模型正在输出垃圾(比如预测所有输出的平均值,或者它的精确度真的很低),那么你从哪里开始检查呢?

无法训练神经网络的原因有很多,因此通过总结诸多调试,作者发现有一些检查是经常做的。这张列表汇总了作者的经验以及最好的想法,希望也对读者有所帮助。

I. 数据集问题

报码:训练的神经网络不工作?一文带你跨过这37个坑

1. 检查你的输入数据

检查馈送到网络的输入数据是否正确。例如,我不止一次混淆了图像的宽度和高度。有时,我错误地令输入数据全部为零,或者一遍遍地使用同一批数据执行梯度下降。因此打印/显示若干批量的输入和目标输出,并确保它们正确。

2. 尝试随机输入

尝试传递随机数而不是真实数据,看看错误的产生方式是否相同。如果是,说明在某些时候你的网络把数据转化为了垃圾。试着逐层调试,并查看出错的地方。

3. 检查数据加载器

你的数据也许很好,但是读取输入数据到网络的代可能有问题,所以我们应该在所有操作之前打印第一层的输入并进行检查。

4. 确保输入与输出相关联

检查少许输入样本是否有正确的标签,同样也确保 shuffling 输入样本同样对输出标签有效。

5. 输入与输出之间的关系是否太随机?

相较于随机的部分(可以认为股票价格也是这种情况),输入与输出之间的非随机部分也许太小,即输入与输出的关联度太低。没有一个统一的方法来检测它,因为这要看数据的性质。

6. 数据集中是否有太多的噪音?

我曾经遇到过这种情况,当我从一个食品网站抓取一个图像数据集时,错误标签太多以至于网络无法学习。手动检查一些输入样本并查看标签是否大致正确。

7. Shuffle 数据集

如果你的数据集没有被 shuffle,并且有特定的序列(按标签排序),这可能给学习带来不利影响。你可以 shuffle 数据集来避免它,并确保输入和标签都被重新排列。

8. 减少类别失衡

一张类别 B 图像和 1000 张类别 A 图像?如果是这种情况,那么你也许需要平衡你的损失函数或者尝试其他解决类别失衡的方法。

9. 你有足够的训练实例吗?

如果你在从头开始训练一个网络(即不是调试),你很可能需要大量数据。对于图像分类,每个类别你需要 1000 张图像甚至更多。

10. 确保你采用的批量数据不是单一标签

这可能发生在排序数据集中(即前 10000 个样本属于同一个分类)。可通过 shuffle 数据集轻松修复。

11. 缩减批量大小

巨大的批量大小会降低模型的泛化能力(参阅:https://arxiv.org/abs/1609.04836)

II. 数据归一化/增强

12. 归一化特征

你的输入已经归一化到零均值和单位方差了吗?

13. 你是否应用了过量的数据增强?

数据增强有正则化效果(regularizing effect)。过量的数据增强,加上其它形式的正则化(权重 L2,中途退出效应等)可能会导致网络欠拟合(underfit)。

14. 检查你的预训练模型的预处理过程

如果你正在使用一个已经预训练过的模型,确保你现在正在使用的归一化和预处理与之前训练模型时的情况相同。例如,一个图像像素应该在 [0, 1],[-1, 1] 或 [0, 255] 的范围内吗?

15. 检查训练、验证、测试集的预处理

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容