【啃书吧:深度学习与MindSpore实践】第三章 3.4 用MindSpore实现简单神经网络(上)

初读:2021年1月5日至2021年1月14日

啃书进度会在目录中标出来。本次目标是完成第三章 3.4节用MindSpore实现简单神经网络(P31-P34)

【啃书吧:深度学习与MindSpore实践】第三章 3.4 用MindSpore实现简单神经网络(上)_第1张图片

终于到了实战的部分了。先是一段LeNet的简介:

LeNet主要用来进行手写字符的识别与分类,并在美国的银行中投入使用,LeNet的确立了卷积神经网络(CNN)的结构,现在神经网络中的许多内容在LeNet的网络结构中都能看到,例如卷积层、池化(Pooling)层和ReLU层。虽然LeNet早在20世纪90年代就已经提出,但由于当时缺乏大规模的训练数据,计算机硬件的性能也较低,LeNet神经网络在处理时效果并不理想。LeNet网络结构比较简单,刚好适合神经网络的入门学习

3.4.1 各层参数说明

LeNet-5是早期卷积神经网络中最有代表性的实验系统之一,它共有7层(不包含输入层),每层都包含可训练参数和多个特征图(Feature Map),每个特征图通过一种卷积滤波器提取输入的一种特征,每个特征图有多个神经元。

1. Input层——输入层

输入图片归一化为32×32。

传统上输入层不视为网络层次结构之一。

2. C1层——卷积层

(1)输入图片大小:32×32

(2)卷积核大小:5×5

(3)卷积核种类:6

 对应的是6个不同的权重值矩阵

(4)输出特征图大小:28×28

 卷积核一次扫描的区域是连续55个像素的区域,因此扫描一幅32×32的图片,横向移动28次,纵向也需要移动28次。

(5)神经元数量:28×28×6=4,704

 卷积核每移动一次,图像的对应像素点与卷积积做一次点积,一个卷积核做28×28次,6个卷积核就乘上6。

(6)可训练参数:(5×5+1)6=156

  一个卷积核是5×5的权重矩阵,加上一个偏置,6个卷积核就乘上。

(7)连接数:(5×5+1)×6×28×28=122,304

  一个连接数可以看作一块图像对应特征图一个元素的线性变换。神经元(对应的是线性变换结果矩阵)的数量是28×28×6个,其中每个元素都是5×5的像素区域与权重的矩阵点积再加1个偏置得到的,所以连接数就是这么多。

3. S2层——池化层(降采样层)

(1)输入大小:28×28

(2)采样区域:2×2

(3)采样方式:4个输入相加

  2×2采样区域的元素相加得到一个标量值。这个值乘以一个权重参数,再加上一个偏置(可训练参数2的由来),再做一次simgmoid映射,得到一个采样值。

(4)采样种类:6

  对应于输出的6个特征图

(5)输出特征图大小:14×14(由28/2计算得出)

与C1层卷积不同之处在于,C1的卷积核没动步长是一个像素,卷积区域之间是要重叠的;而池化层采样每次向前滑动一个采样区间的宽度,所以采样区间不会重叠。

(6)神经元数量:14×14×6=1,176

(7)可训练参数:2×6=12

  每一个采样区间对应一个权重和一个偏置

(8)连接数:(2×2+1)×6×14×14=5,880

 这个地方百思不得其解。按说采样时已经对4个元素做了加法,好像有2×6×14×14个连接就可以啊。

 或许是把输入特征图的4个元素对应输出特征图一个元素的过程也要代入一个完整的线性方程,也就是2×2的采样区域中每个元素与权重相乘,再加上偏置。好像只能这样理解了。

S2中每个特征图的大小是C1中特征图大小的1/4

4. C3层——卷积层

(1)输入:S2中所有6个或者几个特征图组合,具体的输入结合方式:

  • 第一组由6个卷积核 作用于3个相邻的S2层特征图得到

  • 第二组由6个卷积核 作用于4个相邻的S2层特征图得到

  • 第三组由3个卷积核 作用于4个不相邻的S2层特征图得到

  • 第四组由1个卷积核作用于S2层全部的特征图得到

(2)卷积核大小:5×5

(3)卷积核种类:16

 将(1)当中所有的卷积核数量加起来:6+6+3+1=16

(4)输出特征图大小:10×10(C3中的每个特征图是连接到S2中的所有6个特征,表示本层的特征图是上一层提取到的特征图的不同组合)。

(5)可训练参数:6×(3×5×5+1)+6×(4×5×5+1)+3×(4×5×5+1)+(6×5×5+1)=1,516

    数字分别对应(1)中每组卷积核的数量、对应处理的S2层特征图数量、卷积积的大小(5×5)、偏置,不难理解。

(6)连接数:10×10×1,516=151,600

 计算的原理与C1层相同。不重复说了,下面类似的参数也不重复说了。

5. S4层——池化层(降采样层)

(1)输入:16个特征图,每个特征图大小10×10

(2)采样区域:2×2

(3)采样方式:4个输入相加,乘以可训练参数,再加上可训练偏置

(4)采样种类:16

(5)输出特征图大小:5×5(由10 / 2计算得出)

(6)神经元数量:5×5×16=400

(7)可训练参数:2×16=32

(8)连接数:(2×2+1)×16×5×5=2,000

S4层中每个特征图的大小是C3中特征图大小的1 / 4。

6. C5层——卷积层

(1)输入:S4层全部16个单元特征图(与S4全连接)

(2)卷积核大小:5×5

(3)卷积核种类:120

(4)输出特征图大小:1×1(由5-1+1计算得出)

(5)可训练参数/连接:120×(16×5×5+1)=48,120

7. F6层——全连接层

(1)输入:C5 120维向量

(2)计算输入权重向量之间点积,再加上偏置

(3)可训练参数 :84×(120+1)=10,164

 为什么这里有个84?查到些资料这样说:这一层包括一个7×12的比特图,-1表示白色,1表示黑色,这样每个符号的比特图的黑白色就对应于一个编码

8. Output层——全连接层

共有10个节点,分别用数字0——9表示。

写在最后

  1. 这一节讲LeNet,感觉有些猝不及防,因为前面几节讲前向网络,反向传播这些基础 ,没有任何过渡就弄出这么多层次,这么多种卷积核、特征图、采样区域、可训练参数这些术语和具体参数,啃起来非常吃力。建议小伙伴们先了解CNN的一些知识(本书5.1和5.2两节),再回来看这些参数会容易一些。

  2. 这一次啃参数用了太多时间,不能一次把整节的内容整理完,代码部分下周再整理。

转自文章链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=101564

感谢作者的努力与分享,侵权立删!

你可能感兴趣的:(算法)