学习记录:卷积神经网络———卷积与池化

卷积神经网络———简单记录卷积与池化

卷积神经网络是深度学习中最经典的模型之一。当今大多数的深度学习经典模型中都能找到卷积神经网络的影子。卷积和池化可以追溯到LeNet-5网络,这是由 Lecun等人于1998年所提出的,其中的卷积与池化操作这一概念,对后来的卷积神经网络的发展影响巨大。
学习记录:卷积神经网络———卷积与池化
它的网络结构主要包括卷积层、池化层和全连接层。

卷积

卷积分为窄卷积、全卷积和同卷积。但是在介绍卷积类别前,我们先了解关于卷积操作的基本概念。
以TensorFlow中的卷积函数为例
tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None
其中

  • input 为输入图像
  • filter 为卷积操作中的卷积核(个人认为和滤波器差不多)
  • strides 为卷积过程中每一维的步长
  • piddng 定义卷积过程中元素边框与元素内容之间的空间,只能是SAME与VALID中的一个(这个今天不细讲,下次在写)。
  • 后面的两个参数分别为是否使用cudnn加速,和名称

1 卷积核

卷积核就是一个NxM的矩阵,N和M是自己设定的,一般情况下为是相等的。类似于Sobel算子:
学习记录:卷积神经网络———卷积与池化
但是这里的卷积核里的数值是随机的,然后通过反向传播来改变卷积核的数值,不过这是后面的事了。卷积过程如下
学习记录:卷积神经网络———卷积与池化
其中绿色部分为卷积核,卷积操作是将卷积核对应的图片中的矩阵数据意义相乘,再相加。右边红色为特征图像(feature map),其中第一行第一个元素就是图片块中前3行与3列中的数值与卷积核相乘再相加得到的结果。这里展示的只有一个矩阵图像,彩色图像RGB是三通道,所以一个卷积核需要分别对这三通道图像都做一次卷积操作

2 步长

步长是卷积操作的核心。通过步长的变换,可以得到想要的不同类型的卷积操作。如上图卷积卷积操作图,卷积核在移动时,每一次只移动了一个像素格,且在列方向上移动时,同样只移动了一格,这里的步长就为1。

3卷积后维度大小计算

I为原图维数
M为卷积核维数(MxM矩阵)
F为步长
P为原图边框外圈补0的层数

=(IM)/F+1卷积后图像大小 = (I-M)/F+1
(这里的图像的长宽相等)

池化

池化层主要目的是降维,即在保存原油特征的基础上最大限度地将数组的维数变小。池化的操作外表跟卷积很像,只是算法不同。

  • 卷积是将对应像素相乘,然后再加到一起。
  • 池化关心的只有滤波器的尺寸,而不考虑内部的值。算法是去滤波器映射的区域中的最大值或者平均值。

1 均值池化

这个很好理解,就以3*3的大小为例,滤波器所对应的图像中的9个格子所有不为0的像素点去均值。这个得到特征数据会对背景信息更加敏感。
注:一定是不为0的像素点,否则把0像素点带上会增加分母,使得整体数值变低。

2 最大池化

这个就是选取对应区域中像素点最大的值。这个得到的特征数据会对纹理特征信息更加敏感。
学习记录:卷积神经网络———卷积与池化
上图就是采用最大池化,且核为2*2,步长为2。

总结

第一次写博客,打算记录学习路径与回顾曾经学的东西,其中肯定会有许多不足的地方,希望自己能坚持下去,同时如果有错误或者不足的地方希望大家理解、提出!