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

2023-11-09

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

AlexNet网络架构

1.模型架构

AlexNet网络结构相对简单,使用了8层卷积神经网络,前5层是卷积层,后三层是全连接层。

在这里插入图片描述

从上图看,在网络设计上其实并非如上图所示,上图包含了GPU通信的部分。这是由当时GPU受限制引起的,作者使用两块GPU进行计算,因此分为上下两部分。但是以目前GPU的处理能力,单GPU足够了,因此其结构图可以如下所示:

在这里插入图片描述

卷积是为了增加通道大小,池化是为了简化特征。

卷积层C1

C1的基本结构为:卷积–>ReLU–>池化

1.卷积:输入是(227 × \times × 227 × \times × 3),96个大小为( 11 × \times × 11 × \times × 3)卷积核,padding=0,stride=4,所以经过变化(227-11+2 × \times × 0+4)/4=55,所以最终的输出为(55 × \times × 55 × \times × 96)。

2.激活函数:ReLU

3.池化:输入是(55 × \times × 55 × \times × 96),池化核大小为(3 × \times × 3),padding=0,stride=2,所以经过变化(55-3+2 × \times × 0+2)/2=27,所以最终的输出为(27 × \times × 27 × \times × 96)。(此处未将输出分到两个GPU中,若按照论文将分成两组,每组为27×27×48)。

卷积层C2

C2的基本结构为:卷积–>ReLU–>池化

1.卷积:输入是(27 × \times × 27 × \times × 96),256个大小为( 5 × \times × 5 × \times × 96)卷积核,padding=2,stride=1,所以经过变化(27-5+2 × \times × 2+1)/1=27,所以最终的输出为(27 × \times × 27 × \times × 256)。

2.激活函数:ReLU

3.池化:输入是(27 × \times × 27 × \times × 256),池化核大小为(3 × \times × 3),padding=0,stride=2,所以经过变化(27-3+2 × \times × 0+2)/2=13,所以最终的输出为(13 × \times × 13 × \times × 256)。(此处未将输出分到两个GPU中,若按照论文将分成两组,每组为13×13×128)。

卷积层C3

C3的基本结构为:卷积–>ReLU–>池化,注意一点:此层没有进行MaxPooling操作。

1.卷积:输入是(13 × \times × 13 × \times × 256),384个大小为( 3 × \times × 3 × \times × 256)卷积核,padding=1,stride=1,所以经过变化(13-3+2 × \times × 1+1)/1=13,所以最终的输出为(13 × \times × 13 × \times × 384)。

2.激活函数:ReLU。(此处未将输出分到两个GPU中,若按照论文将分成两组,每组为13×13×192)

卷积层C4

C4的基本结构为:卷积–>ReLU–>池化,注意一点:此层没有进行MaxPooling操作。

1.卷积:输入是(13 × \times × 13 × \times × 384),384个大小为( 3 × \times × 3 × \times × 384)卷积核,padding=1,stride=1,所以经过变化(13-3+2 × \times × 1+1)/1=13,所以最终的输出为(13 × \times × 13 × \times × 384)。(此处未将输出分到两个GPU中,若按照论文将分成两组,每组为13×13×192)

2.激活函数:ReLU

卷积层C5

C5的基本结构为:卷积–>ReLU–>池化,。

1.卷积:输入是(13 × \times × 13 × \times × 384),256个大小为( 3 × \times × 3 × \times × 834)卷积核,padding=1,stride=1,所以经过变化(13-3+2 × \times × 1+1)/1=13,所以最终的输出为(13 × \times × 13 × \times × 256)。

2.激活函数:ReLU

3.池化:输入是(13 × \times × 13 × \times × 256),池化核大小为(3 × \times × 3),padding=0,stride=2,所以经过变化(13-3+2 × \times × 0+2)/2=6所以最终的输出为(6 × \times × 6 × \times × 256)。(此处未将输出分到两个GPU中,若按照论文将分成两组,每组为6×6×128)。

全连接层FC6:

FC6的基本结构为:全连接–>ReLU–>Dropout

1.全连接:此层的全连接实际上是通过卷积进行的,输入(6 × \times × 6 × \times × 256),4096个大小为( 6 × \times × 6 × \times × 256)卷积核,padding=0,stride=1,所以经过变化(6-6-2 × \times × 0+1)/1=1,所以最终的输出为(1 × \times × 1 × \times × 4096)。

2.激活函数:ReLU

3.Dropout:全连接层中去掉了一些神经节点,达到防止过拟合,FC6输出为1×1×4096。

全连接层FC7:

FC7的基本结构为:全连接–>ReLU–>Dropout

1.全连接:输入(1 × \times × 1 × \times × 4096)。

2.激活函数:ReLU

3.Dropout:全连接层中去掉了一些神经节点,达到防止过拟合,FC7输出为1×1×4096。

全连接层FC8:

FC8的基本结构为:全连接–>softmax

1.全连接:输入(1 × \times × 1 × \times × 4096)。

2.softmax:softmax为1000,FC8输出为1×1×1000;

在整个过程中,并没有将C1C2中的Local Response Normalization(局部响应归一化)操作添加在其中,此操作就是将ReLU得到的结果进行归一化,读者可以查看一下原论文

2.AlexNet网络架构的贡献:

2.1 ReLU激活函数的引入

  采用修正线性单元(ReLU)的深度卷积神经网络训练时间比等价的tanh单元要快几倍。而时间开销是进行模型训练过程中很重要的考量因素之一。同时,ReLU有效防止了过拟合现象的出现。由于ReLU激活函数的高效性与实用性,使得它在深度学习框架中占有重要地位。

2.2层叠池化操作

  以往池化的大小PoolingSize与步长stride一般是相等的,例如:图像大小为256*256,PoolingSize=2×2,stride=2,这样可以使图像或是FeatureMap大小缩小一倍变为128,此时池化过程没有发生层叠。但是AlexNet采用了层叠池化操作,即PoolingSize > stride。这种操作非常像卷积操作,可以使相邻像素间产生信息交互和保留必要的联系。论文中也证明,此操作可以有效防止过拟合的发生。

2.3Dropout操作

  Dropout操作会将概率小于0.5的每个隐层神经元的输出设为0,即去掉了一些神经节点,达到防止过拟合。那些“失活的”神经元不再进行前向传播并且不参与反向传播。这个技术减少了复杂的神经元之间的相互影响。在论文中,也验证了此方法的有效性。

2.4网络层数的增加

  与原始的LeNet相比,AlexNet网络结构更深,LeNet为5层,AlexNet为8层。在随后的神经网络发展过程中,AlexNet逐渐让研究人员认识到网络深度对性能的巨大影响。当然,这种思考的重要节点出现在VGG网络(下文中将会讲到),但是很显然从AlexNet为起点就已经开始了这项工作。

3.Pytorch代码实现:

import torch
from torch import  nn
import d2lzh_pytorch as d2l

class AlexNet(nn.Module):
    def __init__(self):
        super(AlexNet,self).__init__()
        self.conv=nn.Sequential(
            nn.Conv2d(in_channels=1,out_channels=96,kernel_size=11,stride=4),
            nn.ReLU(),
            nn.MaxPool2d(3,2),
            nn.Conv2d(in_channels=96,out_channels=256,kernel_size=5,stride=1,padding=2),
            nn.ReLU(),
            nn.MaxPool2d(3,2),
            nn.Conv2d(in_channels=256,out_channels=384,kernel_size=3,stride=1,padding=1),
            nn.ReLU(),
            nn.Conv2d(in_channels=384,out_channels=384,kernel_size=3,stride=1,padding=1),
            nn.ReLU(),
            nn.Conv2d(in_channels=384,out_channels=256,kernel_size=3,stride=1,padding=1),
            nn.ReLU(),
            nn.MaxPool2d(3,2)
        )
        self.fc=nn.Sequential(
            nn.Linear(5*5*256,4096),
            nn.ReLU(),
            nn.Dropout(0.5),
            nn.Linear(4096,4096),
            nn.ReLU(),
            nn.Dropout(0.5),
            nn.Linear(4096,10)
        )
    def forward(self,img):
        feature=self.conv(img)
        output=self.fc(feature.view(img.shape[0],-1))
        return output

net=AlexNet()
print(net)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AlexNet网络结构详解(含各层维度大小计算过程)与PyTorch实现 的相关文章

随机推荐

  • spring事务传播机制使用及原理

    事务 事务是逻辑上的一组操作 要么都执行 要么都不执行 事务的四大特性 原子性 构成事务的所有操作 要么都执行完成 要么全部不执行 不可能出现部分成功部分失 败的情况 一致性 在事务执行前后 数据库的一致性约束没有被破坏 隔离性 数据库中的
  • Games104 引擎工具链笔记

    一 GUI体系 1 Immediate Mode 比如UnityUGUI 优点 直接快速 缺点 逻辑比重大 2 Retained Mode 把要绘制的指令存到一个buffer中 统一绘制 优点 把游戏逻辑和UI渲染分开 扩展性强 例子 Un
  • StackOverflow 这么大,它的架构是怎么样的?

    伯乐在线补充 Nick Craver 是 StackOverflow 的软件工程师 网站可靠性工程师 这是 解密 Stack Overflow 架构 系列的第一篇 本系列会有非常多的内容 欢迎阅读并保持关注 为了便于理解本文涉及到的东西到底
  • QT5:VS创建的QT项目头文件标红和控件对象无法调用

    最近使用VS QT编写代码 除了界面和调试比较舒服以外 感觉的很不习惯 小问题不断 问题1 解决方法 1 系统环境变量中添加bin路径 2 属性配置中添加包含目录和库目录 问题2 上面这个问题 会导致ui调用不了添加的控件对象 搞到怀疑人生
  • SourceTree使用教程(七)--合并某次提交

    概述 在Git的实际使用场景中 未必都是很规矩的拉一个分支 开发一个功能 等功能测试完成后 合并到主分支 有很多的场景都是很多人在同一个开发分支上开发 然后按照上线的实际需要 依次去上传自己的功能模块 这个功能模块的提交记录很可能是交叉提交
  • vasp-自旋轨道耦合(SOC)计算步骤

    在VASP中执行自旋轨道耦合 SOC 计算 具体的计算步骤如下 结构优化获取CONTCAR文件 自洽计算 collinear normal VASP calculations 获取CHGCAR文件 能带结构计算 在此步骤中 将KPOINTS
  • 第二十六节:class和焦点的操作管理

    1 关于class的操作 IE9以下的getElementsByClassName 方法兼容问题 p Hello World p p class a 增加样式 World p ul ul function getClass classA i
  • 想要成为网络hacker黑客?先来学习这十方面的知识

    黑客 一词来源于 hacker 在英语中它实际是个中性词 本身并没有褒贬之分 指的是精通编程 计算机 网络的人 另外专门有一个词 cracker 指那些利用计算机技术侵入他人系统从事非法活动的人 但在国内这两个词都被翻译为 黑客 导致在大部
  • Unity制作Live2D(一)模型导入

    目录 序言 前期准备 导入模型 序言 在许多游戏当中 Live2D展现出来了优秀的游戏体验 通过Live2D效果 让平面的游戏人物看起来更加生动 玩家也会感受到更多乐趣 前期准备 前往Live2DCubism官网下载Unity需要的SDKC
  • cenos6.4 mongodb shell模式 常用指令

    如果还没有安装mongodb DB服务端 用户可以参考该篇文章尝试安装mongodb http blog csdn net zhouzhiwengang article details 51441638 我们的实验环境为 操作系统 cent
  • Flutter中Provider的一般用法(一)

    在flutter中Provider是比较常用的Widget Provider通常用来管理value的生命周期 通过Create和Dispose 它们是成对出现的 可以在Create进行value的初始化操作 在dispose进行value的
  • Pytorch之经典神经网络Generative Model(二) —— VAE (MNIST)

    变分编码器 Variational AutoEncoder 是自动编码器的升级版本 其结构跟自动编码器是类似的 也由编码器和解码器构成 回忆一下 自动编码器有个问题 就是并不能任意生成图片 因为我们没有办法自己去构造隐藏向量 需要通过一张图
  • [Linux]模拟实现shell:命令行解释器

    分步思路解析 1 捕捉用户键盘输入 使用例如scanf gets等函数获取用户输入信息即可 2 解析输入的信息 得到命令名称和运行参数 解析获取到的上输入信息 将空格 回车 制表符等等全部忽略 只关心输入的字符串等 假如输入 ls a l
  • MATLAB对正弦信号进行FFT、加窗、调频、调幅。

    1 构造一个仿真信号x1 t 包含4个频率分量 分别为f1 50 f2 100 f3 150 f4 200 采样时间为10s 采样频率1000 绘制x t 的时域图和频谱图 2 针对题目1中的信号x1 t 改变采样时间为12s 采样频率为5
  • 处理cpu %wa过大,导致服务器不能访问的问题。

    今天发现自己的云服务器网站无法访问 查看之后发现 cpu 内存使用正常 监听端口也是正常的 用top命令发现 wa指CPU等待磁盘写入完成的时间 表示磁盘繁忙 这样一来web服务器自然就无法接收新的用户请求 因为linux处理每个进程都需要
  • 15.利用webpack搭建server本地服务

    1 每次修改了一点点的源代码 都会对原来的代码重新做一次打包 有了最新的一个内容 然后通过liveSever搭建一个本地服务 在我们浏览器里面打开把它运行起来 但是这整个过程经常操作会影响我们的开发效率 我们现在想一旦修改源代码以后 web
  • 谈谈数据仓库架构的发展和分类

    在此不做评述 仅供参考 以下内容均引自于ttnn网站 详细链接如下 http groups google com group ttnn lnk li 1发件人 Jerome 查看个人资料日期 2006年12月10日 星期日 下午4时36分电
  • Typora无法打开提示安装新版本解决办法

    最近使用Typora时 发现打开时提示如下错误 The beta version of typora is expired please download and install a newer version 并且会自动跳转到https
  • k8s-hostpath存储使用

    参考网址 https github com nailgun k8s hostpath provisioner 运行k8s hostpath provisioner 下载github项目 git clone https github com
  • AlexNet网络结构详解(含各层维度大小计算过程)与PyTorch实现

    AlexNet网络结构详解 含各层维度大小计算过程 与PyTorch实现 AlexNet网络架构 1 模型架构 2 AlexNet网络架构的贡献 3 Pytorch代码实现 AlexNet网络架构 1 模型架构 AlexNet网络结构相对简