首页 > 编程知识 正文

CNN卷积神经网络的主要结构,cnn卷积神经网络三大特点

时间:2023-05-04 06:59:40 阅读:29464 作者:1576

卷积神经网络(CNN )原理正文的主要内容: CNN的定义使用构成CNN的CNN定义代码(Tensorflow ) CNN:CNN是前馈神经网络,前馈神经网络每个神经元只与前一层的神经元相连。 接收上一层的输出,输出到下一层。 每层都没有反馈。

简而言之,是单向的多层结构。 同一层的神经元之间不相互连接,层间的信息传递只能向一个方向进行。 除输入层、输出层外,中间全部为隐藏层,隐藏层为一层或多层。

CNN在模式分类领域得到了更广泛的应用,因为该网络可以直接输入原始图像,避免了图像的复杂预处理。

CNN工作概述:拾取图像,经过一系列卷积层、非线性层、池化(下采样)层和完全连接层,最终输出。 输出的是描述图像内容的一系列分类概率。

CNN对比经典的神经网络

在经典神经网络中,整个图像被传输到网络中,训练各网络层的权重。 输入简单居中的图像(如Mnist手写的数码照片)可以提高网络识别的效果,但输入更复杂、更多样的图像(如跳上窗户的小猫)会降低网络识别的效果,使其无法识别。 添加更多隐式层来学习输入图像的抽象特征可能会有帮助,但增加神经元数量、消耗训练所需的计算资源和过多的内存是不现实的。 CNN识别目标的过程是首先找到相关的低级特征,诸如边缘、线段、曲线等,然后使用多个卷积层构建更抽象的高级特征。 在卷积层学习过程中,CNN网络通过共享多个卷积内核(或特征检测器)的权重来学习每个图像的局部信息,并将其用于构建抽象特征图像。 卷积核的共享特性大大降低了网络训练所需的参数量。 P.S.这里介绍一下有关RGB的知识。 在以下记述过程中使用。

RGB :红(r )、绿(b )、蓝(c )、b )三种颜色通道的变化及通过将它们叠加得到各种颜色。 RGB分别有256个等级的亮度(0~255 ),一个像素含有2^24种颜色。 (32位颜色也是2^24中的颜色,但添加了2^8的灰度。

因此,在图像识别领域,卷积核的设置相当于一个像素通常具有三个信道,一个像素表示三个元素的一维阵列。

CNN配置:1. 卷积层:

首先,介绍卷积的定义。 卷积是生成两个函数f和g中第三个函数的数学运算符。 这里指的是运算卷积内核和输入项得到新的输出项。

如果输入激活贴图(特征贴图) 32323的像素值数组,过滤器)也称为“神经元”(neuron )或“内核”(kernel ),会影响“感知场”(receptive field ) 过滤器是一个数组,其中的元素称为权重或参数,过滤器的深度和首先,过滤器位于图像的左上角,然后向右滑动一个像素。 幻灯片前的滤镜值与图像的原始像素值相乘。 这也称为积分积的计算。 这些乘积合计得到了一个数。 由于该滤波器可获得2828个结果,所以结果可表示为2828个阵列。

如果使用两个而不是一个5 x 5 x 3滤波器,则总输出为28 x 28 x 2。 的过滤器越多,“空间维”(spatial dimensions )也越好。 每个卷积核检查的特征都不同。

EXAMPLE:

这里给你曲线过滤器。 可以将每个过滤器视为“特征标识符”(feature identifiers )。 这里的特征是指例如直边、原色、曲线之类的东西。 想想所有图像共有的最简单的特征。 假设第一组滤波器是7 x 7 x 3曲线检测器。

简单来说,如果输入图像上的某个形状看起来像一条由滤镜表示的曲线,则所有点的乘积相加后会得到较大的值,移动滤镜后会出现以下情况:

这是一个相当小的值。 这是因为图像的这一部分与曲线检测器滤波器不对应。 卷积层输出活动贴图。 因此,在这个滤镜卷积示例中,如果滤镜值是曲线检测器,活动贴图将显示图像中与曲线最相似的区域。

在本示例中,活动映射28 x 28 x 1的左上角的值为6600。 高数值意味着输入内容中的曲线很可能激活了过滤器。 激活贴图右上角的值为0。 这是因为输入内容中没有可激活过滤器的内容。 更简单地说,原始图像的这个区域没有曲线。 这只是一组用于检测右曲线的滤镜。 还有其他检测左曲线和直线边缘的滤波器。 过滤器越多,活动映射的深度越大,您就越能理解输入内容。

如果使用三个5 x 5 x 3滤波器,则第一个卷积层的输出将是28 x 28 x 3阵列,三个滤波器代表三个特征。

进入另一个卷积层时,第一个卷积层的输出是第二个卷积层的输入。 第一层的输入是原始图像,第二个卷积层的输入是第一层输出的活动映射。 对第2层的输入大致指示了图像中低级特征的位置。 在此基础上,如果采用一组通过第二个卷积层的滤波器,则输出将成为表现更高级特征的主动映射。 这种特征可以是半圆(曲线和直线的组合)或四边形(数直线的组合)。 越进入网络越深,随着时间的推移

更多卷积层后,你将得到更为复杂特征的激活映射。
越深入网络,过滤器的感受野越大,意味着它们能够处理更大范围的原始输入内容。

2. 完全连接层:
完全连接层观察上一层的输出(其表示了更高级特征的激活映射)并确定这些特征与哪一分类最为吻合。完全连接层观察高级特征和哪一分类最为吻合和拥有怎样的特定权重,因此当计算出权重与先前层之间的点积后,你将得到不同分类的正确概率。
(说白了全连接就是一个分类器。将上层抽取出来的特征向量sxdwk做一个权重计算,输出各个类别的概率,就是这个,没了。)

另外,全连接层是将前面得到的Feature map整合为一个值,如果这个值大,说明符合我们要找的特征,和位置无关。全连接层之前的部分作用是提取特征,全连接层的作用是分类。
(例如,全连接层是一个100*1000的矩阵,1000个数字每个数代表了一个基本特征,得到1000个具体特征的值(值越大,说明特征越明显),然后后面的全连接层就可以对这些特征进行进一步分类,比如分为狗,猫,鸡,就会通过一个1000*3的矩阵来得到一个1*3向量,用于分类。)

3. 池化层:
一旦我们知道了原始输入(这里会有一个高激活值,即特征明显的表现)中一个特定的特征,它与其它特征的相对位置就比它的绝对位置更重要。这一层大幅减小了输入卷的空间维度(长度和宽度改变了,但深度没变),叫做池化层。
两个主要目的:

权重参数的数目减少到了75%(在池化层是2x2的前提下),因此降低了计算成本。控制过拟合。

池化层有多种选择:

最大池化:采用了一个过滤器(通常是 2x2 的)和一个同样长度的步幅。然后把它应用到输入内容上,输出过滤器卷积计算的每个子区域中的最大数字。平均池化。L2-norm池化。

4. Dropout层:
防止神经网络的权重与训练样本太过匹配以至于在处理新样本的时候表现平平。
Dropout 的概念在本质上非常简单。Dropout 层将「丢弃(drop out)」该层中一个随机的激活参数集,即在前向通过(forward pass)中将这些激活参数集设置为 0。
好处是该网络将能够为特定的样本提供合适的分类或输出,即使一些激活参数被丢弃。此机制将保证神经网络不会对训练样本「过于匹配」,这将帮助缓解过拟合问题。
另外,Dropout 层只能在训练中使用,而不能用于测试过程,这是很重要的一点。

CNN的使用:

训练(TRAIN):
计算机通过一个名为反向传播的训练过程来调整过滤器值(或权重)。
(训练的过程就是一个刚出生的小孩子逐渐成长的过程。CNN 经历的便是一个介绍图片与分类标记的训练过程。在深入探讨之前,先设定一个训练集,在这里有上千张狗、猫、鸟的图片,每一张都依照内容被标记。反向传播分为四部分:前向传导,损失函数,后向传导以及权重更新。损失函数用最常用的MSE。)

我们训练时优化的目标是预测标记(卷积网络的输出)与训练标记相同(意味着网络预测正确)。为了做到这一点,我们想要将损失数量最小化。将其视为微积分优化问题的话,也就是说我们想要找出是哪部分输入(例子中的权重)直接导致了网络的损失(或错误)。

学习速率不能太大也不能太小,高学习速率意味着权重更新的动作更大,因此可能该模式将花费更少的时间收敛到最优权重。然而,学习速率过高会导致跳动过大,不够准确以致于达不到最优点。这一点可以通过下图形象地展现:

总的来说,前向传导、损失函数、后向传导、以及参数更新被称为一个学习周期。对每一训练图片,程序将重复固定数目的周期过程。

测试(TEST):
准备另一组测试样本,以及样本对应的标记集合(TEST和Training要使用不同的数据集),使其通过CNN。输出与实际情况相比较,来检测网络是否有效。

步幅:步幅设置要保证输出内容是整数而不是分数。步幅越大,空间维度越小。

填充:如果把 5 x 5 x 3 的过滤器用在 32 x 32 x 3 的输入上时,输出的大小会是 28 x 28 x 3。注意,这里空间维度减小了。如果我们继续用卷积层,尺寸减小的速度就会超过我们的期望。在网络的早期层中,我们想要尽可能多地保留原始输入内容的信息,这样我们就能提取出那些低层的特征。比如说我们想要应用同样的卷积层,但又想让输出量维持为 32 x 32 x 3 。为做到这点,我们可以对这个层应用大小为 2 的零填充(zero padding)。零填充在输入内容的边界周围补充零。如果我们用两个零填充,就会得到一个 36 x 36 x 3 的输入卷。

一般,零填充的格子数可以通过下式计算:

K是过滤器尺寸。运用这个公式,输入输出可以保持一致的空间维度。

PS:补充超参数的概念
超参数:在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。关键的超参数有:

学习率:优化算法中更新网络权重的幅度大小,采用哪种学习率取决于所选择优化算法的类型,如SGD、Adam、Adagrad、AdaDelta或RMSProp等算法。

迭代次数:迭代次数是指整个训练集输入到神经网络进行训练的次数。当测试错误率和训练错误率相差较小时,可认为当前的迭代次数是合适的,否则需继续增大迭代次数,或调整网络结构。

批次大小:在卷积神经网络的学习过程中,小批次会表现得更好,选取范围一般位于区间[16,128]内。CNN网络对批次大小的调整十分敏感。

激活函数:激活函数具有非线性,理论上可以使模型拟合出任何函数。通常情况下,rectifier函数在CNN网络中的效果较好。当然,可以根据实际任务,选择其他类型的激活函数,如Sigmoid和Tanh等等。

隐层数目:过多计算成本大,慢,达到让训练精度不再上升就可以停止了。

隐层单元数:过少会欠拟合(训练样本上误差极大),过多的时候,要采取正确的正则化方式防止过拟合。

权重初始化:均匀分布,正态分布。

Dropout方法:常见的正则化方法,改善过拟合,默认为0.5。

在我们的卷积层后,存在非线性层,一般我们使用ReLU(修正线性单元)层,目的是给一个在卷积层中刚经过线性计算操作(只是数组元素依次(element wise)相乘与求和)的系统引入非线性特征。非线性激活函数的作用是用来加入非线性因素的,提高神经网络对模型的表达能力,解决线性模型所不能解决的问题(比如线性不可分的分类问题)。ReLU 层效果好得多,因为神经网络能够在准确度不发生明显改变的情况下把训练速度提高很多(由于计算效率增加)。
ReLU:

CNN的代码(Tensorflow):


定义权重矩阵(卷积核),偏置矩阵,卷积运算,池化运算:

其中padding的含义是填充,具体理解为:

第一层卷积核,偏置项, 池化:

第二层卷积核,偏置项,池化:

全连接层:

完成分类:

训练和评估模型:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。