【忆臻解读】Andrej Karpathy提到的神经网络六大坑
最近,李飞飞老师得意门生Andrej Karpathy大神在推特上连发几条twitter,细数了六种神经网络研究中的常见错误。
下面我总结一下我学习过程中遇到下面6条中的4条。
1you didn't try to overfit a single batch first
正确解释@张楠 这句话是说在用大数据集训练之前先用小数据集试一下,排除一些明显的错误。
之前的我误解的解释如下:
没有先试过所有训练数据作为一个大batch训练,我们都知道,在训练神经网络的过程中,对于数据会有三个方法处理,一个是min-batch,一个是SGD,一个是Andrej Karpathy提到的所有数据作为一个batch。虽然将所有训练数据作为一个大batch训练能够保证梯度是往正确的方向移动,但是我们绝大部分都是min-batch,然后调节其中的batch-size这个超参数,我个人也没有尝试过将所有训练数据作为一个大batch训练,之后可以试试。(这里额外说一句,batch-size是很重要的超参数,需要仔细调节)
2train(),eval()模式混用
you forgot to toggle train/eval mode for the net
忘了为网络切换训练/评估模式
这个理由主要是针对model 在训练时和评价时不同的 Batch Normalization 和 Dropout 方法模式。
3忘掉设置.zero_grad()
you forgot to .zero_grad()(in pytorch) before .backward()
忘了在.backward()之前.zero_grad()(在pytorch中)
这个错误我真正碰到过,忘记了写.zero_grad()各种nan,导致结果非常差,最后找了一天才找到。大家可以在实在找不到原因的是,打印梯度出来看看,是不是有某些层参数为0,几乎没有学习,有些为nan了,去逐步找原因。
4误传参数
you passed softmaxed ouputs to a loss that expects raw logits
将softmaxed输出传递给损失函数,本来期望是logits值,而不是过了softmax之后的值。
大白话讲就是给函数传进去的参数错啦!!我们在编写代码的时候很容易犯这种错误,因为最后run起来的时候,它不报错啊,哥,不报错,只是结果很差,这很难受啊,我们很难发现错误,第一感觉,我去,idea不work,所以大家效果不好的时候,不要放弃啊,仔细看看有没有常见的bug!!
5BatchNorm的坑
使用BatchNorm时,您没有对线性/ 二维卷积层使用bias = False,或者反过来忘记将其包含在输出层中。 这个倒不会让你失败,但它们是虚假的参数
答案来自@陈明jian
如果卷积层后面跟着BatchNormalization的话,卷积层就不需要偏置参数b,只需要w参数。
6误用view操作
以为view()和permute()是一样的事情(不正确地使用view)
答案来自@深度学习修汽车
举例说明:比如要将一个(2, 12)的tensor改为(4, 2, 3)的tensor。这样就不能直接用view而需要多次用permute()来交换axis(转置2D的matrix)来达到目的。
tc.manual_seed(1)
x = tc.randn(2, 12)
print(x)
y = x.permute(1, 0)
print(y)
z = y.view(4, 3, 2)
print(z)
a = z.permute(0, 2, 1)
print(a)
大家可以在留言区踊跃讨论自己在深度学习中遇到的坑,讨论成长最快。
PS:不开赞赏,希望大家看后随手点赞、点广告,支持我们,谢谢大家。
- 学界 !李飞飞高徒Andrej Karpathy提醒你,小心搭建神经网络的六个坑
- 【财富空间】Andrej Karpathy发文谈神经网络:这不仅仅是分类器,这是一种新的软件开发思想
- Andrej Karpathy发文谈神经网络后,引发的对硬件,软件和学件的思考
- Andrej Karpathy发文谈神经网络:这不仅仅是分类器,这是一种新的软件开发思想
- 详细解读神经网络十大误解,再也不会弄错它的事情原理
- 台大林轩田机器学习技法神经网络深度学习完全解读
- 拆解式解读如何用飞桨复现胶囊神经网络(Capsule Network)
- RNN 扫盲:循环神经网络解读及其 PyTorch 应用实现
- 使用物理学和领域知识的神经网络的无标签监督解读(上)
- 常见的五种神经网络(4)-深度信念网络(下)篇之深度信念网络的原理解读、参数学习
- ICCV 2019| Auto GAN 论文解读,神经网络结构搜索 + 生成对抗网络
- 一份完全解读:是什么使神经网络变成图神经网络?(未整理完)
- 神经网络之激活函数 dropout原理解读 BatchNormalization 代码实现
- 解读神经网络十大误解,再也不会弄错它的工作原理
- 一文读懂神经网络(附解读&案例)
- 最新论文解读 | 神经网络“剪枝”的两个方法
- 详细解读神经网络十大误解,再也不会弄错它的工作原理
- 详细解读神经网络十大误解,再也不会弄错它的工作原理
- 点云配准的端到端深度神经网络:ICCV2019论文解读
- 【Stanford CNN课程笔记】5. 神经网络解读1 几种常见的激活函数