AlexNet网络详解
文章目录
- 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网络详解相关推荐
- 卷积神经网络之AlexNet网络详解
一 介绍 Alex Krizhevsky等人训练了一个大型的卷积神经网络用来把ImageNet LSVRC-2010比赛中120万张高分辨率的图像分为1000个不同的类别.在测试卷上,获得很高准确率 ...
- AlexNet 网络详解及Tensorflow实现源码
版权声明:本文为博主原创文章,未经博主允许不得转载. 1. 图片数据处理 2. 卷积神经网络 2.1. 卷积层 2.2. 池化层 2.3. 全链层 3. AlexNet 4. 用Tensorflow搭 ...
- 第十六章 ConvNeXt网络详解
系列文章目录 第一章 AlexNet网络详解 第二章 VGG网络详解 第三章 GoogLeNet网络详解 第四章 ResNet网络详解 第五章 ResNeXt网络详解 第六章 MobileNetv1网 ...
- AlexNet网络结构详解与代码复现
参考内容来自up:3.1 AlexNet网络结构详解与花分类数据集下载_哔哩哔哩_bilibili up主的CSDN博客:太阳花的小绿豆的博客_CSDN博客-深度学习,软件安装,Tensorflow领 ...
- ResNet网络详解并使用pytorch搭建模型、并基于迁移学习训练
1.ResNet网络详解 网络中的创新点: (1)超深的网络结构(突破1000层) (2)提出residual模块 (3)使用Batch Normalization加速训练(丢弃dropout) (1 ...
- MobileNetv1、v2网络详解、使用pytorch搭建模型MobileNetv2并基于迁移学习训练
1.MobileNetv1网络详解 传统卷积神经网络专注于移动端或者嵌入式设备中的轻量级CNN网络,相比于传统卷积神经网络,在准确率小幅降低的前提下大大减少模型参数与运算量.(相比VGG16准确率减少 ...
- AlexNet网络结构详解(含各层维度大小计算过程)与PyTorch实现
AlexNet网络结构详解(含各层维度大小计算过程)与PyTorch实现 1.AlexNet之前的思考 2.AlexNet网络结构 3.AlexNet网络结构的主要贡献 4.PyTorch实现 ...
- ResNet网络详解与keras实现
ResNet网络详解与keras实现 ResNet网络详解与keras实现 Resnet网络的概览 Pascal_VOC数据集 第一层目录 第二层目录 第三层目录 梯度退化 Residual Lear ...
- GoogleNet网络详解与keras实现
GoogleNet网络详解与keras实现 GoogleNet网络详解与keras实现 GoogleNet系列网络的概览 Pascal_VOC数据集 第一层目录 第二层目录 第三层目录 Incepti ...
最新文章
- poj1236(强连通分量)
- 开发日记-20190825 关键词 管道和FIFO
- const指针 常指针
- wifi的基础知识及原理1
- 一个超轻量级工作流引擎:Workflow-Core
- linux性能分析top iostat vmstat free,linux 性能篇 -- top用法(示例代码)
- 野火stm32呼吸灯程序_说一说STM32启动过程
- Visual Studio2005下配置及运行NUnit
- Android按下多任务java_Android 使用AsyncTask实现多任务多线程断点续传下载
- 计算机组成原理第五版(白中英)第三章多层次存储器 习题
- 软件工程导论习题集 | 170道选择 | 50道填空 | 40道简答 | 其他试卷资源
- UNITY 对话系统
- java多个文件压缩打包成zip下载
- 小程序开发可以用什么语言?
- jboot学习之路(一)
- macbook linux 双系统,macbookair双系统怎么切换使用?macbookair双系统切换使用的方法...
- Fastqc使用说明
- 多多自走棋改动_《多多自走棋》 更新,几大改动来袭,一个改动让玩家无奈!...
- 新型冠状病毒传播规律离散微观模型(结果与实际情况一致)-附源码
- 基于Android+机智云的室内植物墙智能控制系统
热门文章
- 2008年8月20号,星期二,晴。青,取之于蓝而青于蓝;冰,水为之而寒于水。——《荀子•劝学》
- python修复老照片_老照片修复还原
- hp计算机如何进入启动界面,惠普电脑bios怎么进入-进入惠普电脑bios的方法 - 河东软件园...
- gstreamer 无组件问题修复
- Pygame从0实战11(泡泡小游戏完成)
- 几何-九种二次曲面类型
- 用cocos2d-x模拟单摆运动的程序
- java Thread Dump 日志分析
- 情人节到了,手把手教你制作一款像开了挂一样有效的H5表白软件
- Discuz 二次开发 (一) 目录结构和运行逻辑