【卷积神经网络】什么是卷积神经网络,什么是卷积操做,什么是池化操做?

咱们常常会听到“卷积神经网络”这个名词,那么什么是卷积神经网络?它和神经网络有什么关系呢?网络

====================================================ide

1.神经网络中隐藏层、神经元数量和计算的关系大数据

以前讲到了神经网络,简单的讲就是:[ 输入层 ⇒ 隐藏层 ⇒ 输出层 ] 这样的结构的计算网络(也有一些教程里把输入层做为神经网络的第0层)3d

在以前的例子中,我用了两个全链接层做为隐藏层建立了一个用于求解计算线性回归问题的神经网络(固然这个模型可以计算全部(x,y)的问题)blog

若是把输入层改成多值,那么这个神经网络就能够用于求解多输入单输出的问题,可是随着输入值的增多,隐藏层的层数或者每层的神经元数量也须要增多(这个道理相似于求解方程,一个方程只能求解一个未知数,求解多个未知数须要用到多个方程)教程

然而全链接层的计算量很是大,好比2层100个神经元的全链接,就须要100 *100次计算,3层的话就须要100 * 100 * 100 的计算,当神经网络的层数增长、每层神经元数量增长的同时,计算量的增长也是至关惊人的。图片

2.特定的神经网络更善于解决特定的问题效率

如今看一下下面这张图片,并判断一下图中是否有蝴蝶,同时思考一下咱们是怎么观察这张图片的?神经网络

咱们会一眼发现中间偏左的位置有一只黑蝴蝶,而后偏右的位置有一只白蝴蝶方法

然而,周围的其余植物、土壤等因素都会被咱们无心识的忽略,事实上这些因素确实和咱们的观察目的无关

在这个过程当中,其实就是肉眼在执行“卷积操做”,只观察与目的相关的元素,而且只会关注这一小块区域

全是全链接层的神经网络确实可以解决公共性问题,可是在特定的问题上训练效率和识别准确度上不会很高,并且计算量会至关惊人

好比这张图片是480 * 270的,也就是说输入值的x有12万之多,须要的隐藏层和神经元数量就会更多

而这张图片上的大部份内容都与咱们的观察目标无关,那么咱们为何不忽略这些因素、只关注咱们须要关注的内容呢?

因此当咱们须要识别图片(或者其余计算机视觉处理)的时候更多的会在神经网络中添加卷积神经网络层,对图片进行卷积操做,提取必要的特征而后进行判断、识别

3.什么是卷积神经网络

那么说了那么多,到底什么是卷积神经网络呢?

其实上面已经回答了,卷积神经网络就是加入了卷积神经网络层的神经网络,是加入了“卷积操做”的神经网络

====================================================

上面以肉眼为例子只是大概的了解了一下卷积操做的意义,那么计算机是如何执行卷积操做的呢?

卷积操做就是使用同一个卷积核在原图(的数据矩阵)上进行扫描,将每一个点以及周围的像素值(大小同卷积核)与卷积核中相对位置的值进行乘运算操做,并将所得的和生成一张新的图片(的数据矩阵)的过程

这里提到了卷积操做的一些要素(下面以2D卷积操做做为例子)

1.卷积核 kernel(过滤器 filter)

卷积核就是观察的范围,可是与肉眼不一样,计算机的观察范围要比咱们小的多,通常咱们使用3 * 3,5 * 5,7 * 7等矩阵做为卷积核

应该使用多大的卷积核,通常也是根据输入图片的大小来决定的,输入的图片越大,使用的卷积核也越大

(思考一下,为何卷积核通常都是奇数?)

2.步长 strides

肉眼能够很容易的直接找到目标内容,而计算机却不行,计算机须要一行一行的把整张图片扫描一遍才能找到

而扫描的间距就是步长,通常为了避免遗漏特征值,扫描的的步长一般都会设定成1(针对大图时也会将步长设大)

3.填充 padding

只扫描可卷积的像素(padding=‘valid’):

若是使用3 * 3的卷积核进行卷积,那么一般状况下须要从(2,2)的位置开始(此处下标从1开始)

由于若是从(1,1)开始,则该点的左面和上面都没有数据

同理最终以(n-1,n-1)结束,若是步长为1,卷积操做之后获得的结果会比原来的图片长宽各少2个像素。

(思考一下,若是卷积核为5 * 5,会减小多少个像素?)

扫描全部像素(进行边缘0填充,padding=‘same’):

这种方式无论卷积核多大,都从(1,1)开始操做,周边不足的地方以0进行填充,因此步长为1的状况下,卷积之后获得的结果和原图大小是同样的

4.深度 depth

拿一个卷积核对图片进行一次卷积操做,将会获得一个结果,拿多个卷积核对图片进行屡次卷积操做就会获得多个结果,这个结果的数量就是深度

为何要对同一张图片进行屡次卷积操做呢?

首先,咱们回想一下全链接层中的参数是什么?是上层神经元到本层某个神经元的权重w,两层之间的参数w的数量就是两层神经元个数的乘积

而卷积操做对图片进行卷积操做的时候使用的是同一个卷积核,那么这个卷积核就和全链接层中的一个w是相同的意义,一个卷积核就是一个参数(或者也能够理解为一个卷积核就对应一个或一组神经元),在神经网络的训练过程当中,每一个卷积核的值都会被调整

====================================================

如今已经了解了什么是卷积操做,可是咱们通常看到的例子里,在卷积操做事后都会跟一个池化操做

那么什么是池化操做呢?池化操做的目的是什么呢?

池化操做就是使用一个特定大小的池(相似于卷积核)对图片数据进行扫描,按照不一样池的类型作不一样的操做,好比经常使用的有最大池化操做和平均池化操做,就是按照池的大小从池中求最大值或者平均值,池化操做能够有效的提取图片数据的特征值并进一步缩减数据量

接下来看一下池化操做的一些要素(依然以2D为例)

1.池大小pool_size

相似于卷积操做有卷积核同样,池化操做也有一个池大小,这个大小决定了池化操做的颗粒度,池大小越大数据量缩减的就约明显

2.步长 strides

池化步长的概念和卷积步长的概念差很少,可是池化通常都以池大小为步长,毕竟池化的主要目的是为了缩减数据

3.填充 padding

当输入的数据大小不是池大小的整数倍的时候,就须要作边缘填充,这个填充的方法也和卷积相似

相关文章
相关标签/搜索