4000336031 微信 li1377174255

成都大数据分析培训机构

揪出BUG!解析调试神经网络的技巧

来源:成都大数据分析培训机构 发布时间:2018/3/19 10:00:02

揪出BUG!解析调试神经网络的技巧

以下建议是针对神经网络初学者的,这些建议都来自于我在行业应用和斯坦福大学里为神经网络初学者提供建议所获得的经验。本质上讲,神经网络要比大多数程序难以调试,因为大多数神经网络bug不会导致类型错误或运行时错误。只会导致不良的收敛。特别是你刚入门,碰到这些问题会非常令人沮丧!但经验丰富的神经网络训练者能够系统地克服这些困难,尽管有许多看似模棱两可的错误信息:

 引用

 性能错误:你的神经网络没有训练好(Performance Error: your neural net did not train well.)。

 对于门外汉来说,这条错误信息令人畏惧。但是对经验丰富的人来说,这是一个巨大的错误。它意味着样板代码不能正常工作,是时候深入代码调试了!

 如何处理NaN

 到目前为止,我的学生提出的常见的一个问题就是,“我为什么会得到NaN错误。”有时,这问题有复杂的原因。但多数情况下,NaN错误在前100次迭代中出现,原因很简单:你的学习率过高了。当学习率非常高的时候,就会在前100次迭代的时候出现NaN错误。用因子为3来降低学习率,直到前100次迭代不再出现NaN错误。这么做一旦有效,你就有了一个非常好的学习率作为开端。根据我的经验,好的学习率是你得到NaN错误的范围的一到十分之一。

 如果你在100次迭代之后碰到了NaN错误,又有两种常见原因。

 1.如果你使用的是RNN,确保你使用了梯度下降,并对梯度使用L2正则化。RNN似乎在训练早期会产生梯度,10%或更少的批次有学习峰值,此时的梯度幅值是相当高的。没有对梯度削减,这些峰值会产生NaN。

 2.如果写的是自定义的网络层,那么很有可能因为除以0而引发NaN。另一个众所周知会产生Nan错误的层是Softmax层。Softmax计算包括分子分母的exp(x)操作,它可以用无穷大除以无穷大,会产生NaN。确保你使用了稳定的Softmax实现。

 神经网络学习不到任何东西怎么办

 一旦你没有了NaN错误,那么你的神经网络就可以在上千次迭代中平稳运行,而且不会在前几百次迭代后减少训练损失。当你次构建代码库的时候,好别使用2000次迭代。这并不是因为所有的网络可以从低于2000次迭代开始学习。相反,从开头开始编码网络很可能出现bug,在达到高迭代次数之前,你会想要过早进行调试。现在的目的是一次又一次地缩小问题范围,直到你得到了一个在2000次迭代以下训练出来的网络。幸运地是,有两种方式来降低复杂性。

 1.将训练集大小减小到10个实例。在几百次的迭代中,在这10个实例上,神经网络通常会出现过度拟合的情况。许多编码错误不会导致过拟合的出现。如果你的网络在10个实例的训练集上没有出现过度拟合,那么确保你使用的数据挂上了正确的标签。将批次大小减小到1来检查批次计算错误。在代码中添加打印语句确保输出与你期望的一致。通常情况下,你可以通过上面介绍的纯粹蛮力来找出错误。一旦网络可以在10个实例上训练,你可以试着让它在100个实例上训练。如果这种方式运行正常,但效果不是很好,你可以试试下面的方法。

培训大数据,就到成都科多大数据培训机构,成都好专业的大数据培训机构:http://cddashujupx.soxsok.com/

联系人:徐老师

电 话:400-0336-031

Q   Q:3511068149



领取试听课
每天限量名额,先到先得
温馨提示:为不影响您的学业,来校区前请先电话或QQ咨询,方便我校安排相关的专业老师为您解答
  • 详情请进入 成都大数据分析培训机...

关于我们 | 招生信息 | 新闻中心 | 学校动态

版权所有:搜学搜课(www.soxsok.com)