AlexNet 详解+pytorch实现

AlexNet是2012年ILSVRC 2012(ImageNet Large Scale Visual Recognition Challenge)竞赛的冠军网络。由Hinton和他的学生Alex Krizhevsky设计的。论文原文
中文版

网络结构

AlexNet论文中所示的网络结构如下:
在这里插入图片描述
因为Alex使用在训练模型时使用了两块GPU,所以上下两部分结构是一样的,解读一部分就可以了。

AlexNet的特色

1.首次使用GPU进行加速训练
2.激活函数使用了ReLU函数,而不是Sigmoid函数或者Tanh激活函数。
3.使用了LRN局部响应归一化
4.在全连接层的前两层中使用了Dropout,随机失活神经元,以此来减少过拟合。

详解

AlexNet模型共有5个卷积层,3个全连接层,前两个卷积层和第五个卷积层有pool池化层,其他两个卷积层没有池化。

1.输入
AlexNet的输入是(1 * 3 * 227 * 227)

2.Conv1-第一卷积层
in_channels = 3
out_channels = 96
kernel_size = 11
stride = 4
输出h/w:(227-11)/4 + 1 = 55

2.pool2-第一池化层
输入h/w = 55
in_channels = 96
out_channels = 96
kernel_size = 3
stride = 2
输出h/w:(55-3)/2 + 1 = 27

在这里插入图片描述

3.Conv2-第二卷积层
输入h/w = 27
in_channels = 96
out_channels = 256
kernel_size = 5
padding = 2
stride = 1
输出h/w:(27-5+2*2)/1 + 1 = 27

4.pool2-第二池化层
输入h/w = 27
in_channels = 256
out_channels = 128
kernel_size = 3
stride = 2
输出h/w:(27-3)/2 + 1 = 13

在这里插入图片描述

5.Conv2-第三卷积层
输入h/w = 13
in_channels = 128
out_channels = 192
kernel_size = 3
padding = 1
stride = 1
输出h/w:(13-3+1*2)/1 + 1 = 13
在这里插入图片描述

6.Conv2-第四卷积层
输入h/w = 13
in_channels = 192
out_channels = 384
kernel_size = 3
padding = 1
stride = 1
输出h/w:(13-3+1*2)/1 + 1 = 13
在这里插入图片描述

7.Conv2-第五卷积层
输入h/w = 13
in_channels = 384
out_channels = 256
kernel_size = 3
padding = 1
stride = 1
输出h/w:(13-3+1*2)/1 + 1 = 13
在这里插入图片描述

8.pool2-第三池化层
输入h/w = 13
in_channels = 256
out_channels = 256
kernel_size = 3
stride = 2
输出h/w:(13-3)/2 + 1 = 6
在这里插入图片描述

9.Linear-第一全连接层
输入特征图单元数:66256,
输出特征图单元数:4096
全连接参数个数: 66256*4096

每个6 * 6 * 256尺寸的滤波器对第六层的输入数据进行卷积运算生成一 个运算结果,通过一个神经元输出这个运算结果;共有4096个6 * 6 * 256尺寸的滤波器对输入数据进行卷积,通过4096个神经元的输出运算结果;然后通过ReLU激活函数以及dropout运算输出4096个本层的输出结果值。采用的滤波器的尺寸(66256)和待处理的feature map的尺寸(66256)相同,即滤波器中的每个系数只与feature map中的一个像素值相乘;而采用的滤波器的尺寸和待处理的feature map的尺寸不相同,每个滤波器的系数都会与多个feature map中像素相乘。因此第6层被称为全连接层。
在这里插入图片描述
10.Linear-第二全连接层
输入特征图单元数:4096,
输出特征图单元数:4096
全连接参数个数: 40964096
第6层输出的4096个数据与第7层的4096个神经元进行全连接,然后经由ReLU和Dropout进行处理后生成4096个数据。
在这里插入图片描述
11.Linear-第三全连接层(输出层)
输入特征图单元数:4096,
输出特征图单元数:1000
全连接参数个数: 4096
1000
第7层输入的4096个数据与第8层的1000个神经元进行全连接,经过训练后输出被训练的数值。
在这里插入图片描述

AlexNet 实现

使用fashion-MNIST数据集,因此padding与原网络略有差异

net = nn.Sequential(
    nn.Conv2d(1, 96, kernel_size=11, stride=4, padding = 1),
    nn.ReLU(),
    nn.MaxPool2d(kernel_size=3, stride=2),
    nn.Conv2d(96, 256, kernel_size=5, padding=2),
    nn.ReLU(),
    nn.MaxPool2d(kernel_size=3, stride=2),
    nn.Conv2d(256, 384, kernel_size=3, padding=1),
    nn.ReLU(),
    nn.Conv2d(384, 384, kernel_size=3, padding=1),
    nn.ReLU(),
    nn.Conv2d(384, 256, kernel_size=3, padding=1),
    nn.ReLU(),
    nn.MaxPool2d(kernel_size=3, stride=2),
    nn.Flatten(),
    nn.Linear(6400,4096),
    nn.ReLU(),
    nn.Dropout(p=0.5),
    nn.Linear(4096,4096),
    nn.ReLU(),
    nn.Dropout(p=0.5),
    nn.Linear(4096,10))

完整代码:AlexNet-github
参考:机器之心

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值