1

经典CNN之LeNet

手写字体识别模型LeNet5诞生于1994年,是最早的卷积神经网络之一。LeNet5利用卷积、参数共享、池化等操作提取特征,避免了大量的计算成本,最后使用全连接神经网络进行分类识别。

LeNet5的网络结构示意图

LeNet5由7层CNN(不包含输入层)组成,图中输入的原始图像大小是32×32像素,卷积层:Ci;子采样层(pooling,池化):Si;全连接层:Fi。

1

C1层(卷积层)

该层使用了6个卷积核,每个卷积核的大小为5×5,可以得到6个特征图(feature map)。

●   特征图大小

每个卷积核(5×5)与原始的输入图像(32×32)进行卷积,这样得到的特征图大小为(32-5+1)×(32-5+1)= 28×28。

这里有个小知识点:卷积核与输入图像按卷积核大小逐个区域进行匹配计算,匹配后原始输入图像的尺寸将变小,因为边缘部分卷积核无法越出界,只能匹配一次,匹配计算后的尺寸变为Cr×Cc=(Ir-Kr+1)×(Ic-Kc+1),其中Cr、Cc,Ir、Ic,Kr、Kc分别表示卷积后结果图像、输入图像以及卷积核的行列大小。

●   参数个数

由于参数(权值)共享,对于同个卷积核每个神经元均使用相同的参数,因此,参数个数为(5×5+1)×6= 156,其中5×5为卷积核参数,1为偏置参数。

●   连接数

卷积后的图像大小为28×28,因此每个特征图有28×28个神经元,每个卷积核参数为(5×5+1)×6,因此,该层的连接数为(5×5+1)×6×28×28=122304。

2

S2层(下采样层,也称池化层)

●   特征图大小

这一层主要是做池化或者特征映射(特征降维),池化单元为2×2,因此,6个特征图的大小经池化后即变为14×14。

由于池化单元之间没有重叠,在池化区域内进行聚合统计后得到新的特征值,因此经2×2池化后,每两行两列重新算出一个特征值出来,相当于图像大小减半,因此卷积后的28×28图像经2×2池化后就变为14×14。

这一层的计算过程是:2×2 单元里的值相加,然后再乘以训练参数w,再加上一个偏置参数b(每一个特征图共享相同的w和b),然后取sigmoid值(S函数:0-1区间),作为对应的该单元的值。

卷积操作与池化的示意图

●   参数个数

S2层由于每个特征图都共享相同的w和b这两个参数,因此需要2×6=12个参数。

●   连接数

下采样之后的图像大小为14×14,因此S2层的每个特征图有14×14个神经元,每个池化单元连接数为2×2+1(1为偏置量),因此,该层的连接数为(2×2+1)×14×14×6 = 5880。

3

C3层(卷积层)

C3层有16个卷积核,卷积模板大小为5×5。

●   特征图大小

与C1层的分析类似,C3层的特征图大小为(14-5+1)×(14-5+1)= 10×10。

●   参数个数

需要注意的是,C3与S2并不是全连接而是部分连接,有些是C3连接到S2三层、有些四层、甚至达到6层,通过这种方式提取更多特征,连接的规则如下表所示:

例如第一列表示C3层的第0个特征图(feature map)只跟S2层的第0、1和2这三个feature maps相连接,计算过程为:

用3个卷积模板分别与S2层的3个feature maps进行卷积,然后将卷积的结果相加求和,再加上一个偏置,再取sigmoid得出卷积后对应的feature map了。

其它列也是类似(有些是3个卷积模板,有些是4个,有些是6个)。因此,C3层的参数数目为(5×5×3+1)×6 +(5×5×4+1)×9 +5×5×6+1 = 1516。

●   连接数

卷积后的特征图大小为10×10,参数数量为1516,因此连接数为1516×10×10= 151600。

4

S4(下采样层,也称池化层)

●   特征图大小

与S2的分析类似,池化单元大小为2×2,因此,该层与C3一样共有16个特征图,每个特征图的大小为5×5。

●   参数个数

与S2的计算类似,所需要参数个数为16×2 = 32。

●   连接数

连接数为(2×2+1)×5×5×16 = 2000。

5

C5层(卷积层)

●   特征图大小

该层有120个卷积核,每个卷积核的大小仍为5×5,因此有120个特征图。由于S4层的大小为5×5,而该层的卷积核大小也是5×5,因此特征图大小为(5-5+1)×(5-5+1)= 1×1。

这样该层就刚好变成了全连接,当然这里真的只是coincidence,如果原始输入的图像比较大,则该层就不是全连接了。

●   参数个数

本层的参数数目为120×(5×5×16+1) = 48120。

●   连接数

由于该层的特征图大小刚好为1×1,因此连接数为48120×1×1=48120。

6

F6层(全连接层)

●   特征图大小

F6层有84个单元,由于输出层的对应的是一个7×12的比特图,如下图所示,-1表示白色,1表示黑色,这样每个符号的比特图的黑白色就对应于一个编码。

该层有84个特征图,特征图大小与C5一样都是1×1,与C5层全连接。

●   参数个数

由于是全连接,参数数量为(120+1)×84=10164。跟经典神经网络一样,F6层计算输入向量和权重向量之间的点积,再加上一个偏置,然后将其传递给sigmoid函数得出结果。

●   连接数

由于是全连接,连接数与参数数量一样,也是10164。

7

OUTPUT层(输出层)

Output层也是全连接层,共有10个节点,分别代表数字0到9。如果第i个节点的值为0,则表示网络识别的结果是数字i。

●   特征图大小

该层采用径向基函数(RBF)的网络连接方式,假设x是上一层的输入,y是RBF的输出,则RBF输出的计算方式是:

上式中的Wij的值由i的比特图编码确定,i从0到9,j取值从0到7×12-1。RBF输出的值越接近于0,表示当前网络输入的识别结果与字符i越接近。

●   参数个数

由于是全连接,参数个数为84×10=840。

●   连接数

由于是全连接,连接数与参数个数一样,也是840

LeNet卷积层用来识别图像⾥的空间模式,例如线条和物体局部,池化层则⽤来降低卷积层对位置的敏感性,在交替使用卷积层和最大池化层后接全连接层来进⾏图像分类,展示了通过梯度下降训练卷积神经网络可以达到手写数字识别在当时最先进的结果。

2

经典CNN之AlexNet

第一个典型的CNN是LeNet5网络结构,但是第一个引起大家注意的网络却是AlexNet

AlexNet网络结构

网络总共的层数为8层,5层卷积,3层全连接层。

第一层

卷积层C1,输入为224×224×3的图像,卷积核的数量为96,卷积核的大小为11×11×3,步长stride 为4,pad = 0,表示不扩充边缘;

卷积后的图形大小:

wide = (224 + 2 * padding - kernel_size) / stride + 1 = 54

height = (224 + 2 * padding - kernel_size) / stride + 1 = 54

dimention = 96

然后进行 (Local Response Normalized), 后面跟着池化pool_size = (3, 3), stride = 2, pad = 0,最终获得第一层卷积的feature map。

第二层

卷积层C2, 输入为上一层卷积的feature map,卷积的个数为256个,卷积核的大小为:5×5×48,pad = 2,stride = 1,然后做 LRN,最后 max_pooling, pool_size = (3, 3), stride = 2。

第三层

卷积层C3, 输入为第二层的输出,卷积核个数为384, kernel_size = (3 ×3×256),padding = 1,第三层没有做LRN和Pool。

第四层

卷积层C4, 输入为第三层的输出,卷积核个数为384, kernel_size = (3×3), padding = 1, 和第三层一样,没有LRN和Pool。

第五层

卷积层C5, 输入为第四层的输出,卷积核个数为256,kernel_size = (3×3×3), padding = 1。然后直接进行max_pooling, pool_size = (3, 3), stride = 2。

第六、七、八层

第6,7,8层是全连接层,每一层的神经元的个数为4096,最终输出softmax为1000,然后全连接层中使用了RELU和Dropout。

AlexNet将LeNet的思想发扬光大,把CNN的基本原理应用到了很深很宽的网络中。

首先成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题。

Relu函数:

然后选择采用覆盖的池化操作。常规的池化层由于没有重叠,所以pool_size 和 stride一般是相等的,例如8×8的一个图像,如果池化层的尺寸是2×2,那么经过池化后的操作得到的图像是4×4,这种设置叫做不覆盖的池化操作。

而如果 stride < pool_size, 那么就会产生覆盖的池化操作,这种有点类似于convolutional化的操作,在训练模型过程中,覆盖的池化层更不容易过拟合。

同时,神经网络的一个比较严重的问题就是过拟合问题,AlexNet采用的数据扩充和Dropout的方法处理过拟合问题。

对于某一层神经元,通过定义的概率来随机删除一些神经元,同时保持输入层与输出层神经元的个数不变,然后按照神经网络的学习方法进行参数更新,下一次迭代中,重新随机删除一些神经元,直至训练结束。

3

总结

AlexNet和LeNet的设计理念非常相似,但也存在显著差异。首先,AlexNet比相对较小的LeNet5要深得多。AlexNet由八层组成:五个卷积层、两个全连接隐藏层和一个全连接输出层。其次,AlexNet使用ReLU而不是sigmoid作为其激活函数。

AlexNet的更高层建立在底层表示的基础上,以表示更大的特征,如眼睛、鼻子、草叶等等。而更高的层可以检测整个物体,如人、飞机、狗或飞盘。最终的隐藏神经元可以学习图像的综合表示,从而使属于不同类别的数据易于区分。

AlexNet首次证明了学习到的特征可以超越手工设计的特征,AlexNet在结果上要优于LeNet很多,特别是其在处理大规模数据方便的优势更是明显。

AlexNet的问世也开启了深度学习在计算机视觉领域的大规模应用。一般我们可以将其看做浅层神经网络和深层神经网络的分界线。

当然啦,经典的CNN还是有很多其他的网络的,比如VGG、GoogLeNet、ResNet等等,欢迎大伙儿一起学习使用呀!

昇思易点通 | 经典卷积神经网络的深度学习解析相关推荐

  1. 毕业设计 : 车牌识别系统实现【全网最详细】 - opencv 卷积神经网络 机器学习 深度学习

    文章目录 0 简介 1 车牌识别原理和流程 1.1 车牌定位 1.2 基于图形图像学的定位方法. 1.3 基于机器学习的定位方法. 1.4 字符分割 1.5 字符识别 2 基于机器学习的车牌识别 2. ...

  2. 1.10 卷积神经网络示例-深度学习第四课《卷积神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 1.9 池化层 回到目录 1.11 为什么使用卷积? 卷积神经网络示例 构建全卷积神经网络的构造模块我们已经掌握得差不多了,下面来看个例子. 假设,有一张大小为32×32×3 ...

  3. 卷积神经网络在深度学习中新发展的5篇论文推荐

    转载自:Deephub Imba 1.Deformable CNN and Imbalance-Aware Feature Learning for Singing Technique Classif ...

  4. 毕业设计 : 基于深度学习的口罩佩戴检测【全网最详细】 - opencv 卷积神经网络 机器视觉 深度学习

    文章目录

  5. TensorFlow实战:经典卷积神经网络(AlexNet、VGGNet)

    下面表格是两个网络的简单比较: 特点 AlexNet VGGNet 论文贡献 介绍完整CNN架构模型(近些年的许多CNN模型都是依据此模型变种来的)和多种训练技巧 CNN模型复兴的开山之作 使用GPU ...

  6. 经典卷积神经网络的学习(一)—— AlexNet

    AlexNet 为卷积神经网络和深度学习正名,以绝对优势拿下 ILSVRC 2012 年冠军,引起了学术界的极大关注,掀起了深度学习研究的热潮. AlexNet 在 ILSVRC 数据集上达到 16. ...

  7. 实用卷积神经网络 运用python pdf_解析卷积神经网络—深度学习实践手册 中文pdf高清版...

    解析卷积神经网络-深度学习实践手册从实用角度着重解析了深度学习中的一类神经网络模型--卷积神经网络,向读者剖析了卷积神经网络的基本部件与工作机理,更重要的是系统性的介绍了深度卷积神经网络在实践应用方面 ...

  8. 什么是深度学习?45分钟理解深度神经网络和深度学习 刘利刚教授

    什么是深度学习? - 45分钟理解深度神经网络和深度学习 刘利刚 中国科学技术大学图形与几何计算实验室 http://staff.ustc.edu.cn/~lgliu [绪言] 近年来,人工智能(Ar ...

  9. 【深度学习基础】经典卷积神经网络

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 导语 卷积神经网络(Convolutional Neural Ne ...

最新文章

  1. 智源研究院加入“全球人工智能伦理与抗击新冠疫情联盟”
  2. mysql分类和事务回滚
  3. python 字符串前加r b u f 含义
  4. php数组只保留键值,php合并数组并保留键值的实现方法
  5. VC++ MFC单文档应用程序SDI下调用glGenBuffersARB(1, pbo)方法编译通过但执行时出错原因分析及解决办法:glewInit()初始化的错误...
  6. 消费物联网与工业物联网有何区别?
  7. java获取cpu使用率_2019年阿里P8架构师的解析:最新Java性能测试、调优策略
  8. composer 更新php位置,使用composer安装/更新PHP包
  9. Golang学习(12)——regex包
  10. 如何按照页面载入进度制作进度条??
  11. Codeforces 263E Rhombus (看题解)
  12. python集合和字典创建通讯录_Python基础-字典和集合
  13. 直播 | IJCAI 2021论文解读:生理时间序列的分类方法及其在睡眠分期的应用
  14. 国产自主可控智慧会议系统解决方案-移动无纸化会议
  15. 干货篇 | 当CPU使用率达到100%该怎么办?
  16. 【历史上的今天】10 月 4 日:计算机先驱阿塔纳索夫出生;卡巴斯基创始人诞生;谷歌推出 Google Pixel 手机
  17. 目前国内的跨境收款通道有哪些还不错的?
  18. async.whilst 的一个简化版实现
  19. ardupiolt AP_AHRS库类的分析(一)AP_AHRS_NavEKF
  20. 为什么onenote一直在加载_OneNote: 沉睡于电脑中的宝藏笔记软件,高效管理你的学习生活...

热门文章

  1. 初学游戏建模怎么入门
  2. G1D16-fraud-SVM
  3. 高分辨率SAR影像在海岛监视检测中的应用
  4. macOS Monterey 12.3beta5 (21E5227a) 原版黑苹果iso虚拟机镜像
  5. 腾讯不封微信小程序,阿里就能一往无前吗
  6. emwin汉字显示 无Unicode怎么办
  7. 可以进系统桌面如何不用U盘重装系统
  8. 蓝桥杯试题盾神与积木游戏之论减少时间复杂度的重要性
  9. ReSharper反编译C#类库
  10. su oracle 和 su - oracle的区别