The whole CNN

CNN工作原理:输入一张图片,让他经历一系列卷积层、池化层和全连接层,最终得到输出,输出结果可以是图像内容的单独分类或者分类的概率。

整个CNN包括三个层次:输入层、卷积层、全连接层

输入层:输入图片;

卷积层:一个卷积层包括卷积和池化两个步骤,构成一个单元,一张图片经过卷积层之后将会得到一张新的图片;可以经过多次卷积处理;

全连接层:Fully Connected Feedforward network

卷积层

卷积神经网络是含有卷积层的神经网络。我们以二维为例,包含有高H和宽W两个维度,通常用来处理图像数据。

卷积核(滤波器filter)

二维卷积层就是把二维输入数组与二维卷积核进行内积运算得到一个二维输出数组。

卷积核又称为过滤器filter,其大小取决于卷积核的高和宽,通常大小应该是奇数1、3、5、7……。我们以下面这个图作为展示:

将输入数组的深色区域(卷积核窗口)与卷积核进行内积得到一个输出数组的深色区域数字,即0×0+1×1+3×2+4×3=19,然后从左到右、从上到下依次移动卷积核窗口并求内积即可得到输出数组。其中输入数组的深色区域大小取决于卷积核的大小,即两者同高同宽。

卷积核的选择决定对图像的处理效果,可以看作是特征标识符,将图像的某些特征(直边缘、原色、锐化等)表示出来,其他特征尽可能忽略掉。常用的有图像锐化滤波器(Sharpness Filter)、边缘检测滤波器(Edge Detection Filter)、浮雕滤波器(Embossing Filter)

填充Padding和步幅stride

在对输入数组依次移动求内积的过程中,边界元素(某一行或某一列)往往无法单独进行内积运算,因此我们引入填充,填充是指在输入数组的高宽两侧填充元素(通常为0)。

步幅是指卷积核窗口在输入数组上每次移动的行数或列数;

填充可以增加输出的高和宽,通常用来使输出与输入具有相同的高和宽;

步幅可以减小输出的高和宽,步幅变大之后输出数组的维数就会降低;

通道

上面我们讲的都是二维输入数组,适用于纯色图片,但是不适用于彩色图片。彩色图片是由RGB三种颜色叠加形成,相当于是三个二维数组,我们称为三个通道Chanel。

多输入通道对应的卷积核也是多通道,输出也是多通道。

池化层Pooling(也成为下采样层down sampling)

池化层每次对输入数据的一个固定形状窗口(称为池化窗口)中的元素进行计算输出。卷积层是把输入层与卷积核求内积,而池化层则是计算池化窗口内元素的最大值Max Pooling或平均值。

池化层可以压缩数据,减少参数数量。

填充和步幅都同上。

参考:

http://zh.d2l.ai/chapter_convolutional-neural-networks/conv-layer.html

https://blog.csdn.net/zouxy09/article/details/49080029

《机器学习(李宏毅2020spring)》

2020年11月9日更新

多层感知机模型:有一定的局限性。

  1. 图像在同一列邻近的像素在这个向量中可能相距较远。它们构成的模式可能难以被模型识别。
  2. 对于大尺寸的输入图像,使用全连接层容易导致模型过大。假设输入是高和宽均为1,0001,000像素的彩色照片(含3个通道)。即使全连接层输出个数仍是256,该层权重参数的形状也是3,000,000×2563,000,000×256:它占用了大约3 GB的内存或显存。这会带来过于复杂的模型和过高的存储开销。

卷积层尝试解决这两个问题。一方面,卷积层保留输入形状,使图像的像素在高和宽两个方向上的相关性均可能被有效识别;另一方面,卷积层通过滑动窗口将同一卷积核与不同位置的输入重复计算,从而避免参数尺寸过大。