文章目录

  • 1 模型介绍
  • 2 模型结构
  • 3 模型创新
  • 4 Pytorch模型搭建

1 模型介绍

2012年,AlexKrizhevskyAlex KrizhevskyAlexKrizhevsky、IlyaSutskeverIlya SutskeverIlyaSutskever在多伦多大学Geoff Hinton的实验室设计出了一个深层的卷积神经网络AlexNet,夺得了2012年ImageNet LSVRC的冠军,且准确率远超第二名(top5错误率为15.3%,第二名为26.2%),引起了很大的轰动。AlexNet可以说是具有历史意义的一个网络结构。

2 模型结构

从图中可以看出,AlexNet网络结构分为上下两层,分别对应两个GPU的操作过程,除了中间某些层(C3C_3C3​卷积层和F6−8F_{6-8}F6−8​全连接层会有GPU间的交互)外,其他层两个GPU分别计算结果。除去局部响应规范化操作(Local Responsible Normalization, LRN),AlexNet一共包含8层,前5层由卷积层(其中卷积层1、2、5后含有下采样层)组成,而剩下的3层为全连接层。最后一层全连接层的输出作为softmaxsoftmaxsoftmax的输入,得到1000个图像分类标签对应的概率值。除了GPU并行结构的设计,AlexNet网络结构与LeNet十分相似,其网络的参数配置如下表所示。

Layer Name Kernel Size Kernel Num Stride Padding Input Size Output Size
Conv1 11×1111\times1111×11 48(×2GPU)48(\times2_{GPU})48(×2GPU​) 444 [1,2][1,2][1,2] 224×224×3224\times224\times3224×224×3 55×55×9655\times55\times9655×55×96
Maxpool1 3×33\times33×3 /// 222 000 55×55×9655\times55\times9655×55×96 27×27×9627\times27\times9627×27×96
Conv2 5×55\times55×5 128(×2GPU)128(\times2_{GPU})128(×2GPU​) 111 [2,2][2,2][2,2] 27×27×9627\times27\times9627×27×96 27×27×25627\times27\times25627×27×256
Maxpool2 3×33\times33×3 /// 222 000 27×27×25627\times27\times25627×27×256 13×13×25613\times13\times25613×13×256
Conv3 3×33\times33×3 192(×2GPU)192(\times2_{GPU})192(×2GPU​) 111 [1,1][1,1][1,1] 13×13×25613\times13\times25613×13×256 13×13×38413\times13\times38413×13×384
Conv4 3×33\times33×3 192(×2GPU)192(\times2_{GPU})192(×2GPU​) 111 [1,1][1,1][1,1] 13×13×38413\times13\times38413×13×384 13×13×38413\times13\times38413×13×384
Conv5 3×33\times33×3 128(×2GPU)128(\times2_{GPU})128(×2GPU​) 111 [1,1][1,1][1,1] 13×13×38413\times13\times38413×13×384 13×13×25613\times13\times25613×13×256
Maxpool3 3×33\times33×3 /// 222 000 13×13×25613\times13\times25613×13×256 6×6×2566\times6\times2566×6×256
FC1 204820482048 /// /// /// 6×6×2566\times6\times2566×6×256 4096
FC2 204820482048 /// /// /// 4096 4096
FC3 100010001000 /// /// /// 4096 1000

为了简化网络结构,将作者原论文中的在两个GPU上的并行结构合并,接下来我们对AlexNet的每一层作详细的分析。

1、Conv1: kernels:48×2=96;kernel_size:11;padding:[1, 2] ;stride:4

卷积层1输入的尺寸为224×224,卷积核的数量为96,论文中两片GPU分别计算48个核; 卷积核的大小为 11 × 11 × 3 ;卷积核步距stride = 4;padding=[1, 2]表示在原输入图像上左侧补一列0,右侧2列0,上侧一行0,下侧2行0。

输出feature map的尺寸为:N = (W − F + 2P ) / S + 1 = [ 224 - 11 + (1 + 2)] / 4 + 1 = 55

2、Maxpool1: kernel_size:3;pading:0;stride:2

卷积层Conv1之后接着进行了局部响应规范化操作(Local Response Normalized),将规范化的结果送入大小为3×33\times33×3,步距为2的池化核进行最大池化下采样。

输出的feature map尺寸为:N = (W − F + 2P ) / S + 1 = (55 - 3) / 2 + 1 = 27

3、Conv2: kernels:128×2=256; kernel_size:5; padding: [2, 2]; stride:1

卷积层2使用256个卷积核做常规的卷积操作

输出的feature map尺寸为:N = (W − F + 2P ) / S + 1 = (27 - 5 + 4) / 1 + 1 = 27

4、Maxpool2: kernel_size:3; pading:0; stride:2

与下采样层Conv2类似,在上述卷积层之后接着进行了局部响应规范化操作,然后将结果送入大小为3×33\times33×3,步距为2的池化核进行最大池化下采样。

输出的feature map尺寸为:N = (W − F + 2P ) / S + 1 = (27 - 3) / 2 + 1 = 13

5、Conv3: kernels:192×2=384; kernel_size:3; padding: [1, 1]; stride:1

与Conv1和Conv2不同,Conv3、Conv4、Conv5后均不接局部响应归一化LRN层

输出的feature map尺寸为:N = (W − F + 2P ) / S + 1 = (13 - 3 + 2) / 1 + 1 = 13

6、Conv4: kernels:192×2=384; kernel_size:3; padding: [1, 1]; stride:1

输出的feature map尺寸为:N = (W − F + 2P ) / S + 1 = (13 - 3 + 2) / 1 + 1 = 13

7、Conv5: kernels:128×2=256; kernel_size:3; padding: [1, 1]; stride:1

输出的feature map尺寸为:N = (W − F + 2P ) / S + 1 = (13 - 3 + 2) / 1 + 1 = 13

8、Maxpool3: kernel_size:3 padding: 0 stride:2

输出的feature map尺寸为:N = (W − F + 2P ) / S + 1 = (13 - 3) / 2 + 1 = 6

9、全连接层FC1、FC2、FC3

FC1和FC2分别有4096个神经元,FC3输出softmax为1000个(ImageNet数据集分类类别)。

3 模型创新

1、使用ReLU作为激活函数代替了传统的Sigmoid和Tanh

ReLU为非饱和函数,论文中验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题。

2、在多个GPU上进行模型的训练,不但可以提高模型的训练速度,还能提升数据的使用规模

3、使用LRN对局部的特征进行归一化

结果作为ReLU激活函数的输入能有效降低错误率

4、使用随机丢弃技术(dropout)选择性地忽略训练中的单个神经元

在AlexNet的最后几个全连接层中使用了Dropout来避免模型的过拟合

5、重叠最大池化(overlapping max pooling)

即池化范围z与步长s存在关系z>sz>sz>s(如最大池化下采样中核大小为3×33\times33×3,步距为2),避免平均池化(average pooling)的平均效应

4 Pytorch模型搭建

注:由于LRN层对训练结果影响不大,故代码中去除了LRN层

import torch
import torch.nn as nnclass AlexNet(nn.Module):def __init__(self, num_classes=1000):super().__init__()self.features = nn.Sequential(nn.Conv2d(3, 96, kernel_size=11, stride=4, padding=2),  # [None, 3, 224, 224] --> [None, 96, 55, 55]nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=3, stride=2),  # [None, 96, 55, 55] --> [None, 96, 27, 27]nn.Conv2d(96, 256, kernel_size=5, padding=2),  # [None, 96, 27, 27] --> [None, 256, 27, 27]nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=3, stride=2),  # [None, 256, 27, 27] --> [None, 256, 13, 13]nn.Conv2d(256, 384, kernel_size=3, padding=1),  # [None, 256, 27, 27] --> [None, 384, 13, 13]nn.ReLU(inplace=True),nn.Conv2d(384, 384, kernel_size=3, padding=1),  # [None, 384, 13, 13] --> [None, 384, 13, 13]nn.ReLU(inplace=True),nn.Conv2d(384, 256, kernel_size=3, padding=1),  # [None, 384, 13, 13] --> [None, 256, 13, 13]nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=3, stride=2)  # [None, 256, 13, 13] --> [None, 256, 6, 6])self.classifier = nn.Sequential(nn.Dropout(p=0.2),nn.Linear(256 * 6 * 6, 2048),nn.ReLU(inplace=True),nn.Dropout(p=0.2),nn.Linear(2048, 2048),nn.ReLU(inplace=True),nn.Linear(2048, num_classes))def forward(self, inputs):x = self.features(inputs)x = torch.flatten(x, start_dim=1)outputs = self.classifier(x)return outputs

AlexNet网络详解相关推荐

  1. 卷积神经网络之AlexNet网络详解

    一  介绍 Alex Krizhevsky等人训练了一个大型的卷积神经网络用来把ImageNet LSVRC-2010比赛中120万张高分辨率的图像分为1000个不同的类别.在测试卷上,获得很高准确率 ...

  2. AlexNet 网络详解及Tensorflow实现源码

    版权声明:本文为博主原创文章,未经博主允许不得转载. 1. 图片数据处理 2. 卷积神经网络 2.1. 卷积层 2.2. 池化层 2.3. 全链层 3. AlexNet 4. 用Tensorflow搭 ...

  3. 第十六章 ConvNeXt网络详解

    系列文章目录 第一章 AlexNet网络详解 第二章 VGG网络详解 第三章 GoogLeNet网络详解 第四章 ResNet网络详解 第五章 ResNeXt网络详解 第六章 MobileNetv1网 ...

  4. AlexNet网络结构详解与代码复现

    参考内容来自up:3.1 AlexNet网络结构详解与花分类数据集下载_哔哩哔哩_bilibili up主的CSDN博客:太阳花的小绿豆的博客_CSDN博客-深度学习,软件安装,Tensorflow领 ...

  5. ResNet网络详解并使用pytorch搭建模型、并基于迁移学习训练

    1.ResNet网络详解 网络中的创新点: (1)超深的网络结构(突破1000层) (2)提出residual模块 (3)使用Batch Normalization加速训练(丢弃dropout) (1 ...

  6. MobileNetv1、v2网络详解、使用pytorch搭建模型MobileNetv2并基于迁移学习训练

    1.MobileNetv1网络详解 传统卷积神经网络专注于移动端或者嵌入式设备中的轻量级CNN网络,相比于传统卷积神经网络,在准确率小幅降低的前提下大大减少模型参数与运算量.(相比VGG16准确率减少 ...

  7. AlexNet网络结构详解(含各层维度大小计算过程)与PyTorch实现

    AlexNet网络结构详解(含各层维度大小计算过程)与PyTorch实现 1.AlexNet之前的思考 2.AlexNet网络结构 3.AlexNet网络结构的主要贡献 4.PyTorch实现     ...

  8. ResNet网络详解与keras实现

    ResNet网络详解与keras实现 ResNet网络详解与keras实现 Resnet网络的概览 Pascal_VOC数据集 第一层目录 第二层目录 第三层目录 梯度退化 Residual Lear ...

  9. GoogleNet网络详解与keras实现

    GoogleNet网络详解与keras实现 GoogleNet网络详解与keras实现 GoogleNet系列网络的概览 Pascal_VOC数据集 第一层目录 第二层目录 第三层目录 Incepti ...

最新文章

  1. poj1236(强连通分量)
  2. 开发日记-20190825 关键词 管道和FIFO
  3. const指针 常指针
  4. wifi的基础知识及原理1
  5. 一个超轻量级工作流引擎:Workflow-Core
  6. linux性能分析top iostat vmstat free,linux 性能篇 -- top用法(示例代码)
  7. 野火stm32呼吸灯程序_说一说STM32启动过程
  8. Visual Studio2005下配置及运行NUnit
  9. Android按下多任务java_Android 使用AsyncTask实现多任务多线程断点续传下载
  10. 计算机组成原理第五版(白中英)第三章多层次存储器 习题
  11. 软件工程导论习题集 | 170道选择 | 50道填空 | 40道简答 | 其他试卷资源
  12. UNITY 对话系统
  13. java多个文件压缩打包成zip下载
  14. 小程序开发可以用什么语言?
  15. jboot学习之路(一)
  16. macbook linux 双系统,macbookair双系统怎么切换使用?macbookair双系统切换使用的方法...
  17. Fastqc使用说明
  18. 多多自走棋改动_《多多自走棋》 更新,几大改动来袭,一个改动让玩家无奈!...
  19. 新型冠状病毒传播规律离散微观模型(结果与实际情况一致)-附源码
  20. 基于Android+机智云的室内植物墙智能控制系统

热门文章

  1. 2008年8月20号,星期二,晴。青,取之于蓝而青于蓝;冰,水为之而寒于水。——《荀子•劝学》
  2. python修复老照片_老照片修复还原
  3. hp计算机如何进入启动界面,惠普电脑bios怎么进入-进入惠普电脑bios的方法 - 河东软件园...
  4. gstreamer 无组件问题修复
  5. Pygame从0实战11(泡泡小游戏完成)
  6. 几何-九种二次曲面类型
  7. 用cocos2d-x模拟单摆运动的程序
  8. java Thread Dump 日志分析
  9. 情人节到了,手把手教你制作一款像开了挂一样有效的H5表白软件
  10. Discuz 二次开发 (一) 目录结构和运行逻辑