锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

【神经网络】卷积神经网络CNN【含Matlab源码 1932期】

时间:2022-12-22 07:00:00 继电器jqx一62fjqx一64m继电器

一、获取代码的方式

获取代码的方
完整代码已上传到我的资源:神经网络卷积神经网络CNN【含Matlab源码 1932期】

获取代码的方
订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期订阅日起三天内有效);

二、卷积神经网络CNN简介

1 神经元
神经元是人工神经网络的基本处理单元, 一般多输入单输出单元, 如图1所示.其中:xi表示输入信号;n输入信号,输入神经元j.wij表示输入信号xi与神经元j连接的权重值, bj表示神经元内部状态为偏置值, yj输出神经元.输入输出之间的对应关系可以用以下方式表示:
在这里插入图片描述
图1 神经元模型

f (·) 激励函数, 有很多选择, 可以是线性纠正函数 (Rectified Linear Unit, ReLU) [25], sigmoid函数、tanh (x) 函数、径向基函数等。

2 多层感知器
多层感知器 (Multilayer Perceptron, MLP) 由输入层和隐含层组成 (一层或多层) 神经网络模型由输出层组成, 它可以解决单层
传感器无法解决的线性问题.图2是网络拓扑结构图,它含有两个隐含层.

图2 多层传感器结构图
输入层神经元接收输入信号, 每个隐含层和输出层的神经元都与相邻层的所有神经元相连, 即全连接, 同一层的神经元不相连.图2中, 箭头线段表示神经元间的连接和信号传输方向, 每个连接都有一个连接值.隐含层和输出层中每个神经元的输入是前一层所有神经元输出值的加权和.假设xml是MLP输入值为中第l层第m神经元, yml和bml神经元神经元的输出值和偏置值, wiml-一是神经元和第l-第一层神经元的连接权, 则有:

当多层传感器用于分类时, 其输入神经元个数为输入信号的维数, 输出神经元的数量是类别数, 隐含层数和隐藏神经元数的具体情况取决于.但在实际应用中, 受参数学习效率的影响, 浅层模型一般使用不超过3层.BP算法可分为前向传播和后向传播两个阶段, 然后从传播开始MLP的输出层.以图2为例, 损失函数为

第一层为输出层, tj期望输出输出层第j神经元, 一阶偏导损失函数, 网络权值更新公式

其中, η为学习率.

3 CNN
1962年, 生物学家Hubel和Wiesel通过对猫脑视觉皮层的研究, 在视觉皮层中发现了一系列复杂的细胞, 这些细胞对视觉输入空间的局部区域很敏感, 它们被称为感受野.感觉野以某种方式覆盖整个视觉域, 它在输入空间中起局部作用, 因此,在自然图像中可以更好地挖掘出强烈的局部空间相关性.文献[28]将这些细胞分为简单细胞和复杂细胞.根据HubelWiesel层级模型, 视觉皮层中的神经网络有一个层次结构:外膝状体→简单细胞→复杂细胞→低阶超复杂细胞→高级超复杂细胞[29].神经网络结构类似于简单细胞和复杂细胞之间的神经网络结构.在这一层结构中, 处于较高阶段的细胞通常有选择性反应刺激模式更复杂的特征;同时,它们也有更大的感觉, 对刺激模式位置的变化更加不敏感[29].1980年, Fukushima根据Huble和Wiesel层次模型提出了类似神经认知机的结构 (Neocognitron) [29].神经认知机采用简单细胞层 (S-layer, S层) 复杂细胞层 (C-layer, C层) 交替组成, 其中S层与Huble-Wiesel简单细胞层或低阶超复杂细胞层对应于层级模型, C复杂细胞层或高级超复杂细胞层对应.S层能最大限度地响应野外特定边缘的刺激, 提取输入层的局部特征, C来自准确位置的刺激具有局部不敏感性.尽管在神经认知机中没有像BP可利用算法等全局监督学习过程, 但它仍然可以认为是CNN实现网络的第一个项目, 卷积和池化 (也称下采样) 分别受启发于Hubel-Wiesel简单细胞和复杂细胞的概念, 具有位移和轻微变形的输入模式[29,30].随后, LeCun等人基于Fukushima使用研究工作BP算法设计和训练CNN (这个模型叫LeNet-5) , LeNet-5是经典的CNN结构, 在此基础上,后续工作有很多改进, 它在某些模型识别领域取得了良好的分类效果[19].

CNN输入层和卷积层的基本结构 (convolutional layer) 、池化层 (pooling layer, 也称为取样层) 、全连接层和输出层构成.卷积层和池化层一般取几个, 采用卷积层和池化层交替设置, 即一个卷积层连接到一个池化层, 池化层后,再连接一个卷积层, 依此类推.由于卷积层中输出特征面的每个神经元与其输入局部连接, 并通过相应的连接权值和局部输入进行加权和偏置值, 获得神经元输入值, 该过程等同于卷积过程, CNN因此得名。

3.1 卷积层
卷积层由多个特征面组成 (Feature Map) 组成, 每个特征面由多个神经元组成, 每个神经元通过卷积核连接到上一层特征面的局部区域.卷积核是一种权值矩阵 (如果对于二维图像,可以是3×3或5×5矩阵) [19,31].CNN输入的不同特提取输入的不同特征, 第一层卷积层提取边缘、线条、角落等低级特征, 更高层次的卷积层提取更高层次的特征 (1) .为了更好地理解CNN, 下面以一维CNN (1D CNN) 为例, 二维和三维CNN可以依此扩展.图3显示为一维CNN卷积层和池化层结构示意图, 顶层为池化层, 中间层为卷积层, 最底层是卷积层的输入层.

从图3可以看出,卷积层的神经元组织在各个特征表面, 每个神经元通过一组权值连接到上一层特征面的局部区域, 即卷积层中的神经元与输入层中的特征表面局部连接.然后局部加权并传递给非线性函数,如ReLU在卷积层中获得每个神经元的输出值.在相同的输入特面和同一输出特征面中, CNN权值共享, 如图3所示, 权值共享发生在同一种颜色当中, 不同颜色值不共享.可通过权值共享减少


其中:oMap每卷积层输出特征面的数量;iMap输入特征面的数量.1表示偏置, 偏置在相同的输出特征中也被共享.假设卷积层的输出特征面nk神经元的输出值为xnkout, 而xmhin表示输入特征面mh神经元的输出值, 以图3为例, 则.

式 (8) 中, bn偏置值为输出特征面n.fcov (·) 非线性激励函数.在传统的CNN中, 饱和非线性函数通常用于激励函数 (saturating nonlinearity) 如sigmoid函数、tanh函数等.与饱和非线性函数相比, 非线性函数不饱和 (non-saturating nonlinearity) 可解决梯度爆炸/梯度消失问题, 同时也能加快收敛速度[33].Jarrett等人[34]讨论了卷积网络中不同的纠正非线性函数 (rectified nonlinearity, 包括max (0, x) 非线性函数) , 实验发现,它们能显著提高卷积网络的性能, Nair等人[25]也验证了这个结论.所以现在CNN不饱和非线性函数常用于结构中的卷积层激励函数ReLU函数.ReLU函数的计算公式如下所示

图4中实线为ReLU曲线, 虚线为tanh曲线.对于ReLU而言, 若输入大于0, 输出等于输入, 否则输出为0.从图4可以看出, 使用ReLU函数, 输出不会随着输入的逐渐增加而饱和.Chen分析了其报告中的影响CNN性能的三个因素:层数、特征面和网络组织的数量 (1) .该报告使用9种结构CNN中文手写识别实验, 小卷积核通过统计测试结果获得CNN结构结论: (1) 增加网络深度可以提高准确性; (2) 增加特征面的数量也可以提高准确性; (3) 增加卷积层比增加全连接层更准确.Bengio等人[35]指出深度网络结构有两个优点: (1) 能促进特征的重复利用; (2) 在高层表达中获得更抽象的特征, 因为更抽象的概念可以根据更弱的抽象概念来构建, 因此,深度结构可以获得更抽象的表达, 例如在CNN这种抽象是通过池化操作建立的, 更抽象的概念通常对输入的大部分局部变化不变.He等人[36]讨论了如何平衡有限计算的复杂性和时间CNN网络结构的深度、特征面数量、卷积核大小等因素.文献首先研究了深度 (Depth) 卷积核大小之间的关系, 用较小的卷积核代替较大的卷积核, 增加网络深度,增加复杂度, 实验结果表明,当时间复杂度大致相同时,网络深度比卷积核大小更重要; 卷积核较小,深度较深CNN结构比卷积核大,深度浅CNN结构可以获得更好的实验结果.其次, 本文还研究了网络深度与特征面数的关系, CNN网络结构设置为:在增加网络深度时,适当减少特征面的数量, 同时,卷积核的大小保持不变, 实验结果表明, 深度越深, 网络性能越好;然而,随着深度的增加, 网络性能逐渐饱和.此外, 该文献还通过固定网络深入研究了特征面数与卷积核大小的关系, 通过实验对比, 特征面数量与卷积核大小的优先级相似, 它的作用没有网络深度那么大.

图4 ReLU与tanh函数曲线图

在CNN结构中, 深度越深,特征面越多, 则网络能够表示的特征空间也就越大、网络学习能力也越强, 但也会使网络的计算更加复杂, 很容易出现过拟合现象.因而, 网络深度在实际应用中应适当选择目、卷积核的大小及卷积时滑动的步长, 以使在训练能够获得一个好的模型的同时还能减少训练时间.

3.2 池化层
池化层紧跟在卷积层之后, 同样由多个特征面组成, 它的每一个特征面唯一对应于其上一层的一个特征面, 不会改变特征面的个数.如图3, 卷积层是池化层的输入层, 卷积层的一个特征面与池化层中的一个特征面唯一对应, 且池化层的神经元也与其输入层的局部接受域相连, 不同神经元局部接受域不重叠.池化层旨在通过降低特征面的分辨率来获得具有空间不变性的特征[37].池化层起到二次提取特征的作用, 它的每个神经元对局部接受域进行池化操作.常用的池化方法有最大池化即取局部接受域中值最大的点、均值池化即对局部接受域中的所有值求均值、随机池化[38,39].Boureau等人[40]给出了关于最大池化和均值池化详细的理论分析, 通过分析得出以下一些预测: (1) 最大池化特别适用于分离非常稀疏的特征; (2) 使用局部区域内所有的采样点去执行池化操作也许不是最优的, 例如均值池化就利用了局部接受域内的所有采样点.Boureau等人[41]比较了最大池化和均值池化两种方法, 通过实验发现:当分类层采用线性分类器如线性SVM时, 最大池化方法比均值池化能够获得一个更好的分类性能.随机池化方法是对局部接受域采样点按照其值大小赋予概率值, 再根据概率值大小随机选择, 该池化方法确保了特征面中不是最大激励的神经元也能够被利用到[37].随机池化具有最大池化的优点, 同时由于随机性它能够避免过拟合.此外, 还有混合池化、空间金字塔池化、频谱池化等池化方法[37].在通常所采用的池化方法中, 池化层的同一个特征面不同神经元与上一层的局部接受域不重叠, 然而也可以采用重叠池化的方法.所谓重叠池化方法就是相邻的池化窗口间有重叠区域.Krizhevsky等采用重叠池化框架使top-1和top-5的错误率分别降低了0.4%和0.3%, 与无重叠池化框架相比, 其泛化能力更强, 更不易产生过拟合.设池化层中第n个输出特征面第l个神经元的输出值为tnlout, 同样以图3为例, 则有:

其中:tnqin表示池化层的第n个输入特征面第q个神经元的输出值;fsub (·) 可为取最大值函数、取均值函数等.

池化层在上一层滑动的窗口也称为池化核.事实上, CNN中的卷积核与池化核相当于HubelWiesel模型中感受野在工程上的实现, 卷积层用来模拟Hubel-Wiesel理论的简单细胞, 池化层模拟该理论的复杂细胞.CNN中每个池化层的每一个输出特征面的大小 (神经元个数) DoMapN为

其中, 池化核的大小为DWindow, 在图3中DWindow=2.池化层通过减少卷积层间的连接数量, 即通过池化操作使神经元数量减少, 降低了网络模型的计算量.

3.3 全连接层
在CNN结构中, 经多个卷积层和池化层后, 连接着1个或1个以上的全连接层.与MLP类似, 全连接层中的每个神经元与其前一层的所有神经元进行全连接.全连接层可以整合卷积层或者池化层中具有类别区分性的局部信息[42].为了提升CNN网络性能, 全连接层每个神经元的激励函数一般采用ReLU函数[43].最后一层全连接层的输出值被传递给一个输出层, 可以采用softmax逻辑回归 (softmax regression) 进行分类, 该层也可称为softmax层 (softmax layer) .对于一个具体的分类任务, 选择一个合适的损失函数是十分重要的, Gu等人[37]介绍了CNN几种常用的损失函数并分析了它们各自的特点.通常, CNN的全连接层与MLP结构一样, CNN的训练算法也多采用BP算法.

当一个大的前馈神经网络训练一个小的数据集时, 由于它的高容量, 它在留存测试数据 (held-out test data, 也可称为校验集) 上通常表现不佳[30].为了避免训练过拟合, 常在全连接层中采用正则化方法———丢失数据 (dropout) 技术, 即使隐层神经元的输出值以0.5的概率变为0, 通过该技术部分隐层节点失效, 这些节点不参加CNN的前向传播过程, 也不会参加后向传播过程[24,30].对于每次输入到网络中的样本, 由于dropout技术的随机性, 它对应的网络结构不相同, 但是所有的这些结构共享权值[24].由于一个神经元不能依赖于其它特定神经元而存在, 所以这种技术降低了神经元间相互适应的复杂性, 使神经元学习能够得到更鲁棒的特征[24].目前, 关于CNN的研究大都采用ReLU+dropout技术, 并取得了很好的分类性能[24,44,45].

3.4 特征面
特征面数目作为CNN的一个重要参数, 它通常是根据实际应用进行设置的, 如果特征面个数过少, 可能会使一些有利于网络学习的特征被忽略掉, 从而不利于网络的学习;但是如果特征面个数过多, 可训练参数个数及网络训练时间也会增加, 这同样不利于学习网络模型.Chuo等人[46]提出了一种理论方法用于确定最佳的特征面数目, 然而该方法仅对极小的接受域有效, 它不能够推广到任意大小的接受域.该文献通过实验发现:与每层特征面数目均相同的CNN结构相比, 金字塔架构 (该网络结构的特征面数目按倍数增加) 更能有效利用计算资源.目前, 对于CNN网络特征面数目的设定通常采用的是人工设置方法, 然后进行实验并观察所得训练模型的分类性能, 最终根据网络训练时间和分类性能来选取特征面数目.

3.5 CNN结构的进一步说明
CNN的实现过程实际上已经包含了特征提取过程, 以图5、图6为例直观地显示CNN提取的特征.Cao等人[47]采用CNN进行指纹方向场评估, 图5为其模型结构.图5共有3个卷积层 (C1, C3, C5) 、2个池化层 (M2, M4) 、1个全连接层 (F6) 和1个输出层 (O7) .输入的大小为160×160, C1中96×11×11×1 (4) 表示C1层有96个大小为11×11的卷积核, 1为它的输入特征面个数, 4是卷积核在其输入特征面上的滑动步长, 38×38为每个输出特征面的大小.卷积层通过卷积操作提取其前一层的各种不同的局部特征, 由图5可看出, C1层提取输入图像的边缘、轮廓特征, 可看成是边缘检测器.池化层的作用是在语义上把相似的特征合并起来, 池化层通过池化操作使得特征对噪声和变形具有鲁棒性[11].从图上可看出, 各层所提取的特征以增强的方式从不同角度表现原始图像, 并且随着层数的增加, 其表现形式越来越抽象[48].全连接层F6中的每个神经元与其前一层进行全连接, 该层将前期所提取的各种局部特征综合起来, 最后通过输出层得到每个类别的后验概率.从模式分类角度来说, 满足Fisher判别准则的特征最有利于分类, 通过正则化方法 (dropout方法) , 网络参数得到有效调整, 从而使全连接层提取的特征尽量满足Fisher判别准则, 最终有利于分类[48].图6给出了CNN提取心电图 (electrocardiogram, ECG) 特征的过程, 首先通过卷积单元A1、B1、C1 (其中每个卷积单元包括一个卷积层和一个池化层) 提取特征, 最后由全连接层汇总所有局部特征.由图中也可以看出, 层数越高, 特征的表现形式也越抽象.显然, 这些特征并没有临床诊断的物理意义, 仅仅是数理值[48].

三、部分源代码

%%

X1=rand(100,2048);  
X2=20*rand(100,2048); %%%生成两类幅值不同的随机序列,作为两类待分类样本
Xtrain1=[X1;X2];


for i=1:1:200
     for j=1:1:2048
         Xtrain(1,j,1,i)=Xtrain1(i,j);%%输入数据维度转化
     end
end

四、运行结果

五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]周品.MATLAB 神经网络设计与应用[M].清华大学出版社,2013.
[4]陈明.MATLAB神经网络原理与实例精解[M].清华大学出版社,2013.
[5]周飞燕,金林鹏,董军.卷积神经网络研究综述[M].计算机学报. 2017,40(06)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章