【深度学习】卷积神经网络

卷积神经网络

CNN(Convolutional Neural Network)

它的雏形是1998年LeCun的LeNet网络结构,卷积神经网络发展历程中的第一个卷积神经网络

只要包含了卷基层的神经网络都可以理解为卷积神经网络

【深度学习】卷积神经网络_第1张图片

  • Convolutions:卷积层
  • Subsampling:下采样层
  • Full connection:全连接层

卷积神经网络的发展

【深度学习】卷积神经网络_第2张图片

卷积神经网络无处不在

  • Classification
  • Retrieval
  • Detection
  • Segmentation

全连接层

全连接层就是由许许多多的神经元共同连接得来的

神经元

【深度学习】卷积神经网络_第3张图片

  • x1,x2,x3是这个神经元的三个激励,w1,w2,w3是这三个激励对应的权重
  • -1是这个神经元的偏置

BP神经网络

如果将神经元按列进行排列,列与列之间进行全连接,就得到一个BP神经网络

【深度学习】卷积神经网络_第4张图片

  • 从左到右的正向传播过程中能够得到一个输出值,将这个输出值和所期望的输出值进行对比就能得到一个误差值
  • 通过计算每个节点的偏导数就能够计算得到每个节点的误差梯度
  • 将得到的损失值反向应用到损失梯度上,就达到了误差的反向传播过程

实例:利用BP神经网络做车牌数字识别

【深度学习】卷积神经网络_第5张图片



07:59



1、首先读入一张彩色的RGB图像,每一个像素里面都包含3个值(RGB分量)

【深度学习】卷积神经网络_第6张图片

  • 首先将它进行灰度化,每个像素值就只剩下一个分量了
  • 再进行二值化处理,得到一个黑白图像

2、用一个5行3列的滑动窗口在二值化后的黑白图像上进行滑动,每滑动到一个地方就计算这个滑动窗口中白色的像素占整个滑动窗口所覆盖的像素比例

【深度学习】卷积神经网络_第7张图片

  • 当滑动窗口滑动到到最右边的时候,此时列数不够了,可以进行补零处理,也可以进行一个判断,当滑动窗口快越界的时候就暂时把它变成一个5行2列的滑动窗口
  • 通过这个方法遍历整个图像就得到一个5*5的矩阵

3、将所得到的5*5的矩阵按行进行展开,并将其拼接成一个行向量(1行25列),这样就可以把这个行向量当成输入神经网络的输入层

【深度学习】卷积神经网络_第8张图片

4、输入层有了之后,再看输出层。one-hot编码是常用的对标签进行编码的方式

【深度学习】卷积神经网络_第9张图片

  • 上图展示了0-9每个数字对应的one-hot编码,没有重复

5、有了输入和输出之后,就可以对神经网络进行训练了。在实际训练过程中,可以将输入层的输入节点数设为25,将输出层的输出节点数设为10,中间的隐藏层按实际情况进行设置

【深度学习】卷积神经网络_第10张图片

卷积层

卷积层是卷积神经网路中独特的网络结构

【深度学习】卷积神经网络_第11张图片

卷积:一个滑动窗口在特征图上进行滑动,并计算(将卷积核上的值与特征图上的值对应相乘,再进行相加,就得到最后矩阵中的一个值,每滑动一步计算一个值,最终得到卷积结果)

卷积的计算方式



12:04



卷积的目的就是为了进行图像的特征提取

卷积的特性

  • 拥有局部感知机制:以滑动窗口的形式在特征图上进行滑动计算,所以具有局部感知能力
  • 权值共享:滑动过程中,卷积核的值不会发生变化,所以又具有权值共享的特性

权值共享的优势(对比BP神经网络)

【深度学习】卷积神经网络_第12张图片

  • 这里的参数指的是神经元的权重
  • 权值的共享使得卷积神经网络的参数个数大幅度减少

卷积的过程

【深度学习】卷积神经网络_第13张图片



14:14



实际应用过程中往往是对多维的特征矩阵进行卷积操作

卷积核的深度要和输入特征矩阵一致(这里的深度指的是channel,即通道数),都是三维的,最终卷积得到的矩阵是由三通道的输入特征矩阵和三通道的卷积核分别对应卷积,再对应相加后得到一个卷积矩阵

总结

1、卷积核的cahnnel与输入特征层的channel相同(都是三通道)

2、输出的特征矩阵channel与卷积核的个数相同(通过卷积核1和卷积核2最终得到一个两通道的输出特征矩阵)

思考

1、如果加上偏移量bias该如何计算?

只需要将最终卷积得到的矩阵的每个元素和偏移量进行相加即可

2、加上激活函数该如何计算?

常用的激活函数

【深度学习】卷积神经网络_第14张图片

  • 为什么要使用激活函数?在线性的计算过程中引入非线性因素,使其具备解决非线性问题的能力
  • Relu激活函数实际上是将负值全部过滤掉,只保留了正值不变,在实际应用中使用较多
  • 在反向传播误差的过程中,如果使用sigmoid激活函数,导数的求解非常麻烦
  • 如果使用Relu激活函数,权重如果进入失活状态后无法被再次激活,所以在训练的过程中,建议不要一开始就使用特别大的学习率进行学习,否则很容易导致大量神经元失活

3、如果在卷积的过程中出现越界的情况该如何处理?

【深度学习】卷积神经网络_第15张图片

  • 一般强况下,可以使用padding的方式在图像的周围直接补零进行处理,补零后就能够正常地进行卷积,而不会出现越界的情况了

【深度学习】卷积神经网络_第16张图片

  • padding的像素p:一般实际应用过程中是两边同时补零,即左右上下进行对称的:补零操作
  • 上图中只补了一边,所以只用加上一个p就够了
  • N = ( 4 - 3 + 1 )/ 2 + 1 = 2 ,所以最后得到一个2*2的特征矩阵

池化层

【深度学习】卷积神经网络_第17张图片

池化层的目的就是对特征图进行稀疏处理,减少数据运算量

maxpooling下采样:寻找池化核对应范围内的最大值来进行最大下采样操作

【深度学习】卷积神经网络_第18张图片

averagepooling下采样层:寻找池化核对应范围内的平均值来进行平均下采样操作

池化层的特点

1、没有训练参数,只是在原始的特征图上进行求最大值或者平均值的操作

2、它只会改变特征矩阵的宽度(w)和高度(h),并不会改变深度(channel)

3、一般池化核的大小(poolsize)和步长(stride)相同,可以将特征图进行一定比例的缩小,计算更加方便(这只是一般情况下,但并不绝对)

你可能感兴趣的:(深度学习,深度学习,cnn,人工智能)