前言

说起深度学习目标检测算法,就不得不提 LeNet- 5 网络。LeNet-5由LeCun等人提出于1998年提出,是一种用于手写体字符识别的非常高效的卷积神经网络。出自论文《Gradient-Based Learning Applied to Document Recognition》

网络结构

输入 → 卷积 → 池化 → 卷积 → 池化 → 卷积(全连接) → 全连接 → 输出

整个 LeNet-5 网络总共包括7层(不含输入层),分别是:C1、S2、C3、S4、C5、F6、OUTPUT。注意:传统上,不将输入层视为网络层次结构之一

几个参数:
  • 英文字母+数字
  • 英文字母代表以下一种:C→卷积层、S→下采样层(池化)、F→全连接层
  • 数字代表当前是第几层,而非第几卷积层(池化层.ec)
术语解释:
  • 参数→权重w与偏置b
  • 连接数→连线数
  • 参数计算:每个卷积核对应于一个偏置b,卷积核的大小对应于权重w的个数(特别注意通道数)
层数 in_channel out_channel kernel_size stride padding
卷积层C1 1 6 5 1 2
池化层S2 6 6 2 2 0
卷积层C3 6 16 5 1 0
池化层S4 16 16 2 2 0
层数 输入 输出
卷积层C5 16 120
全连接层F6 120 84
输出层 84 10

【注】:池化层的in_channel和out_channel不会变。

输入层(Input Layer)

输入层(INPUT)是 32x32 像素的图像,注意通道数为1。

C1 层-卷积层

C1 层是卷积层,使用 6 个 5×5 大小的卷积核,padding=0,stride=1进行卷积,得到 6 个 28×28 大小的特征图:32-5+1=28。

参数个数:(5*5+1)6=156,其中55为卷积核的25个参数w,1为偏置项b。

连接数:156*28*28=122304,其中156为单次卷积过程连线数,28*28为输出特征层,每一个像素都由前面卷积得到,即总共经历28*28次卷积。

详细说明:对输入图像进行第一次卷积运算(使用 6 个大小为 55 的卷积核),得到6个C1特征图(6个大小为28*28的 feature maps, 32-5+1=28)。我们再来看看需要多少个参数,卷积核的大小为5*5,总共就有6*(5*5+1)=156个参数,其中+1是表示一个核有一个bias。对于卷积层C1,C1内的每个像素都与输入图像中的5*5个像素和1个bias有连接,所以总共有15628*28=122304个连接(connection)。有122304个连接,但是我们只需要学习156个参数,主要是通过权值共享实现的

S2层-池化层(下采样层)

  • 输入:28*28
  • 卷积核:2*2
  • 采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid
  • 卷积核种类(输出通道):6
  • 输出featureMap大小:14*14(28/2)
  • 神经元数量:14 * 14 *6
  • 可训练参数:2*6(和的权+偏置)
  • 连接数:(2 * 2 + 1)* 6 * 14 *14
  • S2中每个特征图的大小是C1中特征图大小的1/4。

详细说明:第一次卷积之后紧接着就是池化运算,使用 2 * 2核 进行池化,于是得到了S2,6个14 * 14的 特征图(28/2=14)。S2这个pooling层是对C1中的2*2区域内的像素求和乘以一个权值系数再加上一个偏置,然后将这个结果再做一次映射。于是每个池化核有两个训练参数,所以共有2x6=12个训练参数,但是有5x14x14x6=5880个连接。

C3层-卷积层

C3 层是卷积层,使用 16 个 5×5xn 大小的卷积核,padding=0,stride=1 进行卷积,得到 16 个 10×10 大小的特征图:14-5+1=10

C3中的每个特征map是连接到S2中的所有6个或者几个特征map的,表示本层的特征map是上一层提取到的特征map的不同组合。

存在的一个方式是:C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图以S2中4个相邻特征图子集为输入。然后的3个以不相邻的4个特征图子集为输入。最后一个将S2中所有特征图为输入。则:可训练参数:6*(3*5*5+1)+6*(4*5*5+1)+3*(4*5*5+1)+1*(6*5*5+1)=1516

C3的前6个feature map(对应上图第一个红框的6列)与S2层相连的3个feature map相连接(上图第一个红框),后面6个feature map与S2层相连的4个feature map相连接(上图第二个红框),后面3个feature map与S2层部分不相连的4个feature map相连接,最后一个与S2层的所有feature map相连。卷积核大小依然为5*5,所以总共有6*(3*5*5+1)+6*(4*5*5+1)+3*(4*5*5+1)+1*(6*5*5+1)=1516个参数。而图像大小为10*10,所以共有151600个连接。

C3与S2中前3个图相连的卷积结构如下图所示:

S4层-池化层(下采样层)

S4 层与 S2 一样也是降采样层,使用 16 个 2×2 大小的卷积核进行池化,padding=0,stride=2,得到 16 个 5×5 大小的特征图:10/2=5。

参数个数:(1+1)*16=32。

连接数:(2 * 2+1) * 16 * 5 * 5= 2000。

详细说明:S4是pooling层,窗口大小仍然是2*2,共计16个feature map,C3层的16个10x10的图分别进行以2x2为单位的池化得到16个5x5的特征图。这一层有2x16共32个训练参数,5x5x5x16=2000个连接。连接的方式与S2层类似

C5层-卷积层

C5 层是卷积层,使用 120 个 5×5x16 大小的卷积核,padding=0,stride=1进行卷积,得到 120 个 1×1 大小的特征图:5-5+1=1。即相当于 120 个神经元的全连接层。

值得注意的是,与C3层不同,这里120个卷积核都与S4的16个通道层进行卷积操作。

参数个数:(5516+1)*120=48120。

连接数:48120*1*1=48120

详细说明:C5层是一个卷积层。由于S4层的16个图的大小为5x5,与卷积核的大小相同,所以卷积后形成的图的大小为1x1。这里形成120个卷积结果。每个都与上一层的16个图相连。所以共有(5x5x16+1)x120 = 48120个参数,同样有48120个连接。C5层的网络结构如下:

F6层-全连接层

  • 输入:c5 120维向量
  • 计算方式:计算输入向量和权重向量之间的点积,再加上一个偏置,结果通过sigmoid函数输出。
  • 可训练参数:84*(120+1)=10164

F6 是全连接层,共有 84 个神经元,与 C5 层进行全连接,即每个神经元都与 C5 层的 120 个特征图相连。计算输入向量和权重向量之间的点积,再加上一个偏置,结果通过 sigmoid 函数输出。

F6 层有 84 个节点,对应于一个 7x12 的比特图,-1 表示白色,1 表示黑色,这样每个符号的比特图的黑白色就对应于一个编码。该层的训练参数和连接数是(120 + 1)x84=10164。ASCII 编码图如下:

Output层

Output 层也是全连接层,是 Gaussian Connections,采用了 RBF 函数(即径向欧式距离函数),计算输入向量和参数向量之间的欧式距离(目前已经被Softmax 取代)。

Output 层共有 10 个节点,分别代表数字 0 到 9。假设x是上一层的输入,y 是 RBF的输出,则 RBF 输出的计算方式是:

上式中 i 取值从 0 到 9,j 取值从 0 到 7*12-1,w 为参数。RBF 输出的值越接近于 0,则越接近于 i,即越接近于 i 的 ASCII 编码图,表示当前网络输入的识别结果是字符 i。

参数个数:84*10=840。

连接数:84*10=840

可视化网址

http://yann.lecun.com/exdb/lenet/a35.html

http://scs.ryerson.ca/~aharley/vis/conv/flat.html

http://scs.ryerson.ca/~aharley/vis/conv/

总结

  • LeNet-5 采用的激活函数是 sigmoid,而目前图像一般用 tanh,relu,leakly relu 较多;
  • LeNet-5 池化层处理与现在也不同;多分类最后的输出层一般用 softmax,与 LeNet-5 不太相同。
  • LeNet-5 是一种用于手写体字符识别的非常高效的卷积神经网络。CNN 能够得出原始图像的有效表征这使得 CNN能够直接从原始像素中,经过极少的预处理,识别视觉上面的规律
  • 由于当时缺乏大规模训练数据,计算机的计算能力也跟不上,LeNet-5 对于复杂问题的处理结果并不理想。

更多学习参考

卷积神经网络LeNet-5的pytorch代码实现

手写数字识别问题(3)——详解卷积神经网络LeNet-5

这可能是神经网络 LeNet-5 最详细的解释了!

我用 PyTorch 复现了 LeNet-5 神经网络(MNIST 手写数据集篇)!

本文由mdnice多平台发布

经典网络架构学习-LeNet相关推荐

  1. 经典网络架构学习-ResNet

    前言 该论文的四位作者何恺明.张祥雨.任少卿和孙剑如今在人工智能领域里都是响当当的名字,当时他们都是微软亚研的一员.微软亚研是业内为数不多的,能够获得科技巨头持续高投入的纯粹学术机构.ResNet 论 ...

  2. 经典网络架构学习-Transformer

    前言 transformer对刚入门深度学习的我来说,太难懂了,从网上查了很多博客,大多文章都来自The Illustrated Transformer .视频链接.这篇文章的图太生动形象了,容易理解 ...

  3. 详解深度学习之经典网络架构(十):九大框架汇总

    目录 0.概览 1.个人心得 2.总结 本文是对本人前面讲的的一些经典框架的汇总. 纯手打,如果有不足之处,可以在评论区里留言. 0.概览 (1)详解深度学习之经典网络架构(一):LeNet (2)详 ...

  4. Python实现经典网络架构Googlenet代码

    Python实现经典网络架构Googlenet代码 VGG非常优秀,但它在ILSVRC上拿到的最高名次是亚军,在VGG登场的2014年,力压群雄拿到冠军的是 在ImageNet数据集上达到6.7%错误 ...

  5. 2.2 经典网络-深度学习第四课《卷积神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.1 为什么要进行实例探究? 回到目录 2.3 残差网络 经典网络 (Classic Networks) 这节课,我们来学习几个经典的神经网络结构,分别是LeNet-5.A ...

  6. 深度学习之经典网络架构AlexNet(二)

    一.简介 AlexNet是2012年ImageNet竞赛冠军获得者Hinton和他的学生Alex Krizhevsky设计的.也是在那年之后,更多的更深的神经网路被提出,比如优秀的vgg,Google ...

  7. 【深度学习经典网络架构—5】:ResNet

    ✨博客主页:米开朗琪罗~

  8. 【深度学习经典网络架构—8】:注意力机制之SE_Block

    ✨博客主页:米开朗琪罗~

  9. 【深度学习经典网络架构—10】:注意力模块之CBAM

    ✨博客主页:米开朗琪罗~

最新文章

  1. 转--Android如何在java代码中设置margin
  2. Java Web(11) Spring MVC 返回Json
  3. python数据类型详解
  4. 区块链BaaS云服务(12)易居(中国) 房地产 EBaaS(Estate Blockchain as a Service)
  5. HTTP 错误 500.21 - Internal Server Error(转)
  6. android webview 网关,在Android webview中CC Avenue支付网关会话过期问题
  7. 神经网络中常用的激活函数
  8. 带有API网关的AWS Lambda
  9. php通过ip地址查询位置,PHP通过IP获取地理位置
  10. C语言之指针指向数组copy问题(二十八)
  11. 【转】php json_encode中文为空的解决办法
  12. 如何开发和维能hold住全场的软件
  13. 父与子python下载不了_python3-父与子的编程之旅安装pygame出现的问题
  14. AIX 系统默认ftp
  15. 甘超波:NLP理解层次
  16. 原备案在腾讯云 如何操作新增网站备案
  17. Android模拟器下重力感应应用的开发-Simulator的使用
  18. 软件设计师知识体系归纳总结
  19. 【axios源码】- 取消请求cancel模块研读解析
  20. JDK8使用G1 垃圾回收器能解决大问题吗?

热门文章

  1. Java - 密码学
  2. 【C语言】如何自动控制输出空格的个数
  3. glance制作Linux镜像,在线升级glance镜像技巧
  4. 元胞自动机 | Matlab实现基于CA元胞自动机的生命游戏模拟
  5. 益阳职业学校那些有计算机,益阳科达职业技术学校有哪些专业
  6. Springboot + Vue 登录功能实现
  7. 聚焦高素质技术技能人才培养 好程序员“育人有方”
  8. 一、web前端开发入门之1.1HTML认知一
  9. Windows Server 2003 禁止关机事件跟踪
  10. 软件测试的职业资格证书有哪些?