Alexnet的感觉最好的图解

AlexNet


Reference

Krizhevsky A, Sutskever I, Hinton G E. ImageNet Classification with Deep Convolutional Neural Networks [J]. Advances in Neural Information Processing Systems, 2012, 25(2):2012.
这里附上SnailTyan归档的相关论文地址
https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf

AlexNet由Alex Krizhevsky设计,该网络结构在2012年ImageNet竞赛中获得冠军。

1. AlexNet网络整体结构
image.png
2. AlexNet网络中张量(图像)尺寸和参数数量

AlexNet网络中总共有5个卷积层和3个全连接层.总共有62,378,344个参数.

Layer NameTensor SizeWeightsBiasesParameters
Input Image227x227x3000
Conv-155x55x9611x11x3x96=348489634944
MaxPool-127x27x96000
Conv-227x27x2565x5x96x256=614400256614656
MaxPool-213x13x256000
Conv-313x13x3843x3x256x384=884736384885120
Conv-413x13x3843x3x384x384=13271043841327488
Conv-513x13x2563x3x384x256=884736256884992
MaxPool-36x6x256000
FC-14096x16x6x256x4096=37748736409637752832
FC-24096x14096 x4096=16777216409616781312
FC-31000x14096x1000=409600010004097000
Output1000x1000
Total62378344
3. AlexNet突破性进展
3.1 引入非线性激活函数:ReLu
image.png

优点:
①不会梯度饱和,解决了gradient vanishing问题。
②计算复杂度低,不需要指数运算。
③适合用于反向传播。
缺点:
①输出不是zero-centered
②Dead ReLU Problem(神经元坏死现象):某些神经元可能永远不会被激活,导致相应参数永远不会被更新(在负数部分,梯度为0)。产生这种现象的两个原因:参数初始化问题;learning rate太高导致在训练过程中参数更新太大。 解决方法:采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。
③ReLU不会对数据做幅度压缩,所以数据的幅度会随着模型层数的增加不断扩张。

3.2 防止过拟合:Dropout

Dropout就是说,在训练的时候,所有的神经元都以一定的概率p被置为0,论文中取p=0.5,但是网络的权值都是共享的。这样,每个bacth送进网络进行训练的时候,相当于每次训练的网络结构都是不太相同的。最终训练完成之后,进行分类的时候,所有的神经元都不会被置为0,也就是说Dropout只发生在训练阶段。这样,最后的分类结果其实就相当于集成了多个不同的网络,效果自然会得到提升,泛化能力也强,在一定程度上可以减轻过拟合。

3.3 防止过拟合:Data augumentation

①从原始图像(256,256)中,随机的crop出一些图像(224,224)。【平移变换,crop】:训练时候,对于256x256的图片进行随机crop到224x224,然后允许水平翻转,那么相当与将样本倍增到((256-224)^2)x2=2048。
②水平翻转图像。【反射变换,flip】:测试时候,对左上、右上、左下、右下、中间做了5次crop,然后翻转,共10个crop,之后对结果求平均。
③给图像增加一些随机的光照。【光照、彩色变换,color jittering】:对RGB空间做PCA,然后对主成分做一个(0,0.1)的高斯扰动。结果让错误率又下降了1%。

3.4 归一化层的使用:LRN

局部响应归一化(Local Response Normalization)原理是仿造生物学上活跃的神经元对相邻神经元的抑制现象(侧抑制),简单来说就是对于在同一位置,不同的map层之间的神经元进行归一化。使得值越大的神经元会更大,小的会更小,从而增加网络的泛化能力,本质上,这个层也是为了防止激活函数饱和。


image.png

① a表示第i个核在位置(x,y)运用ReLu非线性神经元输出,n是同一位置上邻近kernel map的数目,N是kernel的总数。
②n=5 , k =2,α = 10^(-4), β=0.75是超参数,由验证机决定。
举个例子:i=10,N=96,n=4。当求第i=10个卷积核在位置x,y处提取到的特征(a),局部响应归一化过程如下:用(a)除以第8/9/10/11/12在位置x,y处提取的特征之和,就是“每个图”除以“半径以内的其他图对应像素的平方和”。

转载地址:https://www.jianshu.com/p/73532b63068e地址

### AlexNet 网络架构详解 AlexNet 是一种经典的卷积神经网络,在 ImageNet 大规模视觉识别挑战赛中取得了显著的成绩[^1]。该网络的设计充分利用了卷积神经网络的特性,即局部连接和权重共享。 #### 输入层 对于 AlexNet 来说,默认输入是图像数据,通常尺寸为 227×227×3(RGB)。这种设置允许将特定属性编码入网络结构之中,从而提高前馈效率并减少参数数量[^3]。 #### 卷积层 AlexNet 包含五个卷积层,其中前三层各自接有一个最大池化层用于降采样操作。这些卷积层中的每一个都由一组滤波器组成,这些滤波器在空间上仅覆盖一小部分感受野,并且在同一通道内共享相同的权值集合。这不仅降低了计算复杂度,还增强了模型对平移变换的鲁棒性[^4]。 ```python import torch.nn as nn class AlexNet(nn.Module): def __init__(self, num_classes=1000): super(AlexNet, self).__init__() self.features = nn.Sequential( nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=3, stride=2), # 更多卷积层... ) ``` #### 激活函数与池化层 ReLU 非线性激活函数被广泛应用于各个卷积层之后,它能够加速收敛速度并且缓解梯度消失问题。此外,通过采用最大池化策略可以在一定程度上降低特征映射的空间分辨率,进而减轻后续全连接层所需处理的信息量[^5]。 #### 全连接层 最后两层则是标准的全连接层,负责从高级抽象特征向具体类别标签转换的任务。为了防止过拟合现象发生,Dropout 技术也被引入到了这两个阶段之间作为正则项加以应用。 ```python def forward(self, x): x = self.features(x) x = x.view(x.size(0), -1) x = self.classifier(x) return x ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值