深度学习TF—7.卷积神经网络CNN

一、卷积神经网络概述

    卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它由若干卷积层和池化层组成。CNN的基本结构由输入层、卷积层(convolutional layer)、池化层(pooling layer)、全连接层及输出层构成。卷积层和池化层一般会取若干个,采用卷积层和池化层交替设置,即一个卷积层连接一个池化层,池化层后再连接一个卷积层,依此类推。由于卷积层中输出特征图的每个神经元与其输入进行局部连接,并通过对应的连接权值与局部输入进行加权求和再加上偏置值,得到该神经元输入值,该过程等同于卷积过程,CNN也由此而得名。
    卷积神经网络由多层感知机(MLP)演变而来,对于高维输入,将所有神经元与前一层的神经元实现全连接是不实际的,于是采用部分连接(局部感知)。由下图可知,连接数成倍的减少,参数也成倍的减少。
在这里插入图片描述
在这里插入图片描述
    卷积神经网络由于其具有局部区域连接、权值共享、降采样的结构特点,使得卷积神经网络在图像处理领域表现出色。卷积神经网络相比于其他神经网络的特殊性主要在于权值共享与局部连接两个方面。权值共享使得卷积神经网络的网络结构更加类似于生物神经网络。局部连接不像传统神经网络那样,第n-1层的每一神经元都与第n层的所有神经元连接,而是第n-1层的神经元与第n层的部分神经元之间连接。这两个特点的作用在于降低了网络模型的复杂度,减少了权值的数目。
在这里插入图片描述
在这里插入图片描述
    滑动窗口完成整个区域的扫描,实现了局部信息到全局信息的融合;滑动时通过权值共享(w不变)实现了参数量的不增加。在卷积神经网络中,卷积层中的卷积核(或称之为滤波器)类似于一个滑动窗口,在整个输入图像中以特定的步长来回滑动,经过卷积运算之后,从而得到输入图像的特征图,这个特征图就是卷积层提取出来的局部特征,而这个卷积核是共享参数的。在整个网络的训练过程中,包含权值的卷积核也会随之更新,直到训练完成。
    为什么卷积层会有多个卷积核呢?因为权值共享意味着每一个卷积核只能提取到一种特征,为了增加CNN的表达能力,需要设置多个卷积核。但是,每个卷积层中卷积核的个数是一个超参数。

二、卷积神经网络的结构

    卷积神经网络一般包括卷积层,池化层和全连接层。
    卷积层和池化层的共同作用使得CNN能提取出图像中较好的特征(特征提取)。卷积层的作用是提取图像的特征;池化层的作用是对特征进行抽样,降低了图像的分辨率,可以使用较少训练参数,同时还可以减轻网络模型的过拟合程度。卷积层和池化层一般交替出现在网络中,称一个卷积层加一个池化层为一个特征提取过程,但是并不是每个卷积层后都会跟池化层,大部分网络只有三层池化层。网络的最后一般为1~2层全连接层,全连接层负责把提取的特征图连接起来,最后通过分类器得到最终的分类结果。

1.卷积层

    卷积的过程就是提取特征的过程,随着卷积神经网络深度的增加,能提取到越来越高级的特征,也更接近事物的本质。一般来说,高级特征能够用在不同类别事物的分类中,而低级特征能够用于同类事物的分类。
    在卷积层中,通常包含多个可学习的卷积核,上一层输出的特征图与卷积核进行卷积操作,即输入项与卷积核之间进行点积运算,然后将结果送入激活函数,就可以得到输出特征图。每一个输出特征图可能是组合卷积多个输入特征图的值。
  卷积层l的第j单元的输出值 alj的计算公式为:
在这里插入图片描述
其中 al-1j表示选择的输入特征图的集合,k表示可学习的卷积核。下图展示了卷积过程。
在这里插入图片描述
通常把卷积核k看作一个滑动窗口,这个滑动窗口以设定的步长向前滑动。这里输入图像的大小是5×5即M=5,卷积核大小为3×3即k=3,步长为1即s=1,根据卷积层输出计算公式
在这里插入图片描述
可以计算输出图像的大小N=3。
该卷积过程:5×5输入图像与3×3卷积核进行卷积,得到3×3的输出图像。
这样的卷积存在两个缺点:

  • 每次卷积都会导致图像尺寸的变小,如果图像很小、进行卷积的次数很多,最后可能只会剩下一个像素
  • 输入图像的矩阵边缘像素只被计算过一次,而中间像素被卷积计算多次,这就意味着丢失图像边缘信息。为了解决这两个问题,就需要对输入图像进行填充(Padding)
1.1 Padding

在这里插入图片描述
    输入图像矩阵周围填充一层像素,通常填充的元素为0,填充的像素数为1即P=1。边缘像素在被填充后,不再是边缘像素,可以被计算多次。输出图像中边缘像素是受输入图像边缘像素的影响,削弱了边缘信息丢失的缺点。另外,根据卷积层计算公式计算得输出卷积特征图变为5×5,与图像尺寸大小相同,解决了卷积会使图像变小的缺点。
常见的填充方式有Valid和Same填充

  • Valid填充
    不使用填充,即使用M×M的图像与k×k的卷积核相卷积,若步长为1,此时,输出为(M-k+1)
  • Same填充
    通过填充使得输出的卷积特征图尺寸与输入图像尺寸相等,此时填充宽度P=(k-1)/2,但卷积核为奇数

    在计算机视觉领域,k通常是奇数,一方面可以保证使用 Same 填充时填充像素数P是整数,对原图片的填充是对称的;另一方面奇数宽度的卷积核具有一个中心像素点,可以表示卷积核的位置。

1.2 Stride

在这里插入图片描述
    stride是指卷积核在输入上移动时每次移动的距离,直接上图来说明。其中按红框来移动的话stride = 1;按蓝色框来移动的话stride = 2。加入stride后,假设输入大小为M×M,卷积核大小为k×k,stride=s,padding=p,卷积层输出计算公式为
在这里插入图片描述
可以通过stride来完成降维操作。

1.3 多通道计算

    卷积核除了长宽这两个参数之外还有通道数这个参数,首先需要明确的是单个卷积核的通道数要等于图像的通道数,一般图像是RGB模式的话,卷积核的大小为h×w×3。只有一个卷积核的时候,图像经过卷积计算后的结果通道数是一维的,计算方法也简单粗暴。每个通道的对应位置相乘然后,不同通道数之间相加。
在这里插入图片描述
    一般卷积核不止一个,对于多个卷积核的情况也不复杂,直接对每个卷积核进行单个卷积核的操作,然后把它们拼在一起就行了。
在这里插入图片描述
在这里插入图片描述

1.4 layers.Conv2D

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

1.5 tf.nn.conv2d

在这里插入图片描述

2.池化层

    池化层(pooling)的作用主要是降低维度,通过对卷积后的结果进行降采样来降低维度,分为最大池化、平均池化、最小池化与随机池化。池化层比卷积层更大幅度的减少了连接个数,也就是说降低了特征的维度,从而避免过拟合,同时还使得池化输出的特征具有平移不变性。池化层利用图像局部相关的原理,对图像进行下采样,在减小数据量的同时也保留了有用的信息。
在这里插入图片描述
在这里插入图片描述
    均值池化是对所有特征点求平均值,而最大值池化是对特征点的求最大值。而随机池化则介于两者之间,通过对像素点按数值大小赋予概率,再按照概率进行亚采样,在平均意义上,与均值采样近似,在局部意义上,则服从最大值采样的准则。
在这里插入图片描述
    根据Boureau理论可以得出结论,在进行特征提取的过程中,均值池化可以减少邻域大小受限造成的估计值方差,但更多保留的是图像背景信息;而最大值池化能减少卷积层参数误差造成估计均值误差的偏移,能更多的保留纹理信息。随机池化虽然可以保留均值池化的信息,但是随机概率值确是人为添加的,随机概率的设置对结果影响较大,不可估计。

2.1 池化实战

在这里插入图片描述

layers.MaxPool2d(2,strides=2)
第一个2表示池化框的大小为2×2,strides=2表示步长为2

2.2 upsample—上采样

在这里插入图片描述
在这里插入图片描述

2.3 ReLU层—采样

在这里插入图片描述
在这里插入图片描述

3.全连接层

    全连接层就是把卷积层和池化层的输出展开成一维形式,全连接层其实就是普通的神经网络。卷积层与池化层只会进行特征提取,并减少参数量。为了生成最终的输出,我需要全连接层来实现分类/回归任务。

参考如下文章:
卷积神经网络

从零开始搭建卷积神经网络

猜你喜欢

转载自blog.csdn.net/weixin_46649052/article/details/114031540