基于C语言和MATLAB的卷积神经网络设计(代码+报告+ppt)

概述

卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一。卷积神经网络具有表征学习(representation learning)能力,能够按其阶层结构对输入信息进行平移不变分类(shift-invariant classification),因此也被称为“平移不变人工神经网络(Shift-Invariant Artificial Neural Networks,SIANN)”

对卷积神经网络的研究始于二十世纪 80 至 90 年代,时间延迟网络和 LeNet-5 是最早出现的卷积神经网络;在二十一世纪后,随着深度学习理论的提出和数值计算设备的改进,卷积神经网络得到了快速发展,并被应用于计算机视觉、自然语言处理等领域。

卷积神经网络仿造生物的视知觉(visual perception)机制构建,可以进行监督学习和非监督学习,其隐含层内的卷积核参数共享和层间连接的稀疏性使得卷积神经网络能够以较小的计算量对格点化(grid-like topology)特征,例如像素和音频进行学习、有稳定的效果且对数据没有额外的特征工程(feature engineering)要求。卷积神经网络的出现是受到了生物处理过程的启发,因为神经元之间的连接模式类似于动物的视觉皮层组织。

人脑的视觉结构

正如上图所示,我们在谈论任何类型的神经网络时,都不可能不提及一点神经科学以及人体(特别是大脑)及其功能相关的知识,这些知识成为创建各种深度学习模型的主要灵感的来源。

架构

卷积神经网络架构

如上图所示,卷积神经网络架构与常规人工神经网络架构非常相似,特别是在网络的最后一层,即全连接。此外,还注意到卷积神经网络能够接受多个特征图作为输入,而不是向量。下面让我们探索构成卷积神经网络的基本构件及相关的数学运算过程,并根据在训练过程中学到的特征和属性对图像进行可视化和分类。

输入层

输入层主要是 n×m×3 RGB 图像,这不同于人工神经网络,人工神经网络的输入是 n×1 维的矢量。

卷积层

在卷积层中,计算输入图像的区域和滤波器的权重矩阵之间的点积,并将其结果作为该层的输出。滤波器将滑过整个图像,重复相同的点积运算。这里注意两件事:滤波器必须具有与输入图像相同数量的通道;网络越深,使用的滤波器就越多;拥有的滤波器越多,获得的边缘和特征检测就越多;

这里涉及到两个计算量一个是输出宽度,一个是输出高度

:输入图像的宽度、H :输入图像的高度、Fw :滤波器或内核的宽度、Fh :滤波器的高度、P :填充、S :移动步幅。

池化层

目前,有两种广泛使用的池化操作——平均池化(average pooling)和最大池化(max pooling),其中最大池化是两者中使用最多的一个操作,其效果一般要优于平均池化。池化层用于在卷积神经网络上减小特征空间维度,但不会减小深度。当使用最大池化层时,采用输入区域的最大数量,而当使用平均池化时,采用输入区域的平均值。而池化层的核心目标之一是提供空间方差,这意味着你或机器将能够将对象识别出来,即使它的外观以某种方式发生改变。

非线性层

在非线性层中,一般使用 ReLU 激活函数,而不是使用传统的 Sigmoid 或 Tan-H 激活函数。对于输入图像中的每个负值,ReLU 激活函数都返回 0 值,而对于输入图像中的每个正值,它返回相同的值。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U0j6cVG5-1654589780486)(https://www.writebug.com/myres/static/uploads/2022/6/7/7396e9ffb592aa81250292a2a9bfba08.writebug)]

ReLU 激活函数

全连接层

在全连接层中,我们将最后一个卷积层的输出展平,并将当前层的每个节点与下一层的另一个节点连接起来。全连接层只是人工神经网络的另一种说法。全连接层中的操作与一般的人工神经网络中的操作完全相同。

反向传播

在全连接层中,反向传播与任何常规人工神经网络完全相同,在反向传播中(使用梯度下降作为优化算法),使用损失函数的偏导数即损失函数关于权重的导数来更新参数,其中我们将损失函数的导数与激活输出相乘,激活输出的导数与非激活输出相乘,导数为未激活的输出与权重相对应。

在所有优化任务中,无论是在物理学、经济学还是计算机科学中,偏导数都被大量使用。偏导数主要用于计算因变量 f(x, y, z)相对于其独立变量之一的变化率。例如,假设你拥有一个公司的股份,后者的股票会根据多种因素(证券、政治、销售收入等)上涨或下跌,在这种情况下通过偏导数,你会计算多少股票受到影响而其他因素保持不变,股票发生变化,则公司的价格也会发生变化。

池化层

在最大池化特征图层中,梯度仅通过最大值反向传播,因此稍微更改它们并不会影响输出。在此过程中,我们将最大池化操作之前的最大值替换为 1,并将所有非最大值设置为零,然后使用链式法则将渐变量乘以先前量以得到新的参数值。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XoYV2tdd-1654589780487)(https://www.writebug.com/myres/static/uploads/2022/6/7/3ab2aae2dc85fd413200ebc0135974d0.writebug)]

与最大池化层不同,在平均池化层中,梯度是通过所有的输入(在平均合并之前)进行传播。

卷积层

卷积层的反向传播也是一个卷积。

简而言之,上图表明了反向传播是如何在卷积层中起作用的。

实验

任意层 cnn 的实现

两层的 cnn 结果:

一层的 cnn 结果:

致谢

在计算机视觉这门课中收获颇丰,不仅使我解决了之前尚未了解或难以理解的问题,也让我对 MATLAB 这一编程语言有了更深入的理解,这些相关知识也对我在其他方向的学习和理解上有很大的帮助。感谢老师!

参考文献

蔡自兴,刘丽钰,蔡竞峰等,人工智能及其应用第五版【J】

韦斯利.斯奈德,戚海蓉等,计算机视觉基础,机械工业出版社
知识也对我在其他方向的学习和理解上有很大的帮助。感谢老师!

猜你喜欢

转载自blog.csdn.net/newlw/article/details/125167714