1.卷积

1.1卷积操作(方便理解,以二维图片展示,疏忽了通道数)

这个不难理解。咱们知道图画在核算机中是由一个个的像素组成的,能够用矩阵表明。 假设一个5×5的输入图画,咱们界说一个3×3的矩阵(其间的数值是随机生成的)。

【卷积神经网络】卷积层,池化层,全连接层

然后咱们拿这个卷积核,在输入图画里边,选定左上角那个3×3的矩阵,用卷积核与这个矩阵对应的方位相乘,然后得到的9个数,这9个数再相加,终究得到一个成果。

【卷积神经网络】卷积层,池化层,全连接层

然后把卷积核往右边移动一格,持续重复上述核算,再得到一个数字。

【卷积神经网络】卷积层,池化层,全连接层

那么算完了,持续往右边挪,再算,

【卷积神经网络】卷积层,池化层,全连接层

三次核算得到的值是

【卷积神经网络】卷积层,池化层,全连接层

然后往下挪一格,持续重复上述操作,直到咱们把整个5×5的输入图画悉数核算完,得到了9个核算成果

【卷积神经网络】卷积层,池化层,全连接层

以上便是咱们卷积的成果,这整个操作便是卷积操作。

那么有几个问题:

Q1:每次往右移动只能是1格吗?
A1:不是,移动1格,便是步长为1,假如咱们设置步长为2,那就每次移动2格,stride步长由咱们设置
Q2:卷积核里边的数值是怎样设置的?
A2:初始是随机生成的(后面会学习更新)
Q3:所以经过卷积之后,图画一定变小了?
A3:不是的,上面的例子,5x5的输入,卷积之后得到3x3,那么咱们假如给5x5的图画填充一圈,就变成了7x7的图画了,再去拿这个卷积核进行卷积,就会得到5x5的输出。实践中,咱们也的确是这么做的,有一个参数padding即表明是否填充,咱们能够设置填充的范围,以及填充的值,一般填充0。

顺便弥补一个公式:

假设输入图片为 W x W 卷积核巨细为FxF,步长stride=S,padding设置为P(填充的像素数)
则输出图画的巨细=(W - F +2P)/S +1

那么,了解了整个卷积的过程,下面这个图就能看懂了。这个图表明的是输入图画为5×5,卷积核为3×3,步长为1,padding=1,所以得到的输出是5×5。

【卷积神经网络】卷积层,池化层,全连接层

卷积层有很多卷积核,经过做越来越多的卷积,提取到的图画特征会越来越抽象。

1.2实践操作

卷积的流程是上面讲的那样,实践写代码的时分,咱们能够不用那么费事,每一步都自己实现。
框架已经帮咱们封装好的对应的函数,咱们只需求调用函数,传给他相关参数即可。
咱们以pytorch框架为例(tensorflow也差不多)
Conv2d操作时咱们需求设置以下参数:

【卷积神经网络】卷积层,池化层,全连接层

咱们解说几个常用的:

  • in_channels:输入的通道数
  • out_channels:输出的通道数
  • kernel_size:卷积核的巨细,类型为int 或许元组,当卷积是方形的时分,只需求一个整数边长即可,卷积不是方形,要输入一个元组表明高和宽。(卷积核不需求你设置,只需求给定巨细,里边的值是随机生成的)
  • stride:步长(便是每次移动几个像素,默认是1)
  • padding:填充几圈,默认是0,不填充(填充的值为0)
  • dilation:操控卷积核之间的距离(设置这个能够做空洞卷积)
  • groups:操控输入和输出之间的衔接
  • bias:偏置,是否将一个 学习到的 bias 添加输出中,默认是True
  • padding_mode:设置填充的方式

2.池化层

2.1池化层的作用(降维)

一般会在卷积层之间周期性插入一个池化层,其作用是逐步降低数据体的空间尺度,这样就能够削减网络中参数的数量,让池化后的一个像素对应前面图片中的一个区域,削减核算资源耗费,一起也能够有用地操控过拟合。

常见的池化操作有最大池化和平均池化,池化层是由nn巨细的矩阵窗口滑动来进行核算的,类似于卷积层,只不过不是做互相关运算,而是求nn巨细的矩阵中的最大值、平均值等。

如图,对特征图进行最大池化和平均池化操作:

【卷积神经网络】卷积层,池化层,全连接层

【卷积神经网络】卷积层,池化层,全连接层

从上图能够看出池化层能够有用降低数据体空间的巨细。

池化层之所以有用,是由于之前介绍的图片特征具有不变性,也便是经过下采样不会丢掉图片拥有的特征,由于这种特性,咱们能够将图片缩小再进行卷积处理,这样能够大大降低卷积运算的时刻。最常用的池化层方式是尺度为22的窗口,滑动步长为2,对图画进行下采样,将其间75%的激活信息都丢掉,挑选其间最大的保存下来,这其实是由于咱们希望能够愈加激活里边的数值大的特征,去除一些噪声信息。

3.全衔接层

池化层的后面一般接着全衔接层,全衔接层将池化层的所有特征矩阵转化成一维的特征大向量,全衔接层一般放在卷积神经网络结构中的终究,用于对图片进行分类,到了全衔接层,咱们的神经网络就要预备输出成果了

如下图所示,倒数第二列的向量便是全衔接层的数据

【卷积神经网络】卷积层,池化层,全连接层

从池化层到全衔接层会进行池化操作,数据会进行多到少的映射,进行降维,也便是为什么上图从201212变成100个神经元了,数据在渐渐削减,说明离输出成果越来越近,从全衔接层到输出层会再一次削减数据,变成愈加低维的向量,这个向量的维度便是需求输出的类别数。 然后将这个向量的每个值转换成概率的表明,这个操作一般叫做softmax,softmax使得向量中每个值范围在(0,1)之间,它是二分类函数sigmoid在多分类上的推广,目的是将多分类的成果以概率的方式展示出来。

【卷积神经网络】卷积层,池化层,全连接层

由于从卷积层过来的数据太多了,全衔接层的作用主要是对数据进行降维操作,不然数据骤降到输出层,可能会丢掉一些图画特征的重要信息。

4.可视化例子

咱们能够用一个实践的网络LeNET5来看一下咱们方才的解说。

【卷积神经网络】卷积层,池化层,全连接层

这个输入一张32×32的手写数字图片。6@28×28代表:

  • 榜首卷积层的输出通道是6,输出巨细为28×28;
  • 第二个是池化层,通道数不变,还是6,巨细减半,变成了14×14;
  • 第三个还是卷积层,16通道,巨细10×10;
  • 然后第四个是池化层,16通道,巨细5×5;
  • 终究跟两个全衔接层;
  • 终究是输出成果。

LeNET5榜首层是一个卷积层,其输入数据是32x32x1,卷积核巨细5×5,步长=1,padding=0,输出为6@2828;那么,这里输入是单通道的,也便是in_channels=1,那么filter的深度也便是1了,可是输出通道要求是6,也便是out_channels=6,也便是需求6个filter,终究得到6个28×28的图画。

如图:这是整个LeNET5的网络可视化模型,蓝色的那个是32×32的,经过卷积,得到了下一层,也便是黄色的那一层,你能够看到,黄色的那一层是一个立方体,咱们能够把他打开看看

【卷积神经网络】卷积层,池化层,全连接层

能够看到:打开后的确便是6个28×28的成果

【卷积神经网络】卷积层,池化层,全连接层

这个可视化的网站地址是:tensorspace.org/index.html

参阅文章:blog.csdn.net/CP182816386…

参阅文章:blog.csdn.net/holly_Z_P_F…

参阅文章:blog.csdn.net/idwtwt/arti…