目录
1.什么是CNN(卷积神经网络)
卷积网络的核心,当然是卷积。在CNN(卷积网络)的卷积层中,存在着一个个填充数据的正方形“盒子”就是我们说的卷积核。
在CNN网络中,原始图片经过输入层后,会变成灰度或者RGB数据矩阵。
将卷积核与图片数据矩阵对齐,对应的各自中的数据相乘后再相加卷积核在图像上以一定的距离移动运算,这就是步长。
得到的新矩阵能反映图像的部分特征,被称为特征图,它们既是这层的输出,也是下一层的输入。
2.卷积层与池化层
2.1卷积层
先谈一下卷积层的工作原理。
我们是使用卷积核来提取特征的,卷积核可以说是一个矩阵。假如我们设置一个卷积核为3*3的矩阵,而我们图片为一个分辨率5*5的图片。那么卷积核的任务就如下所示:
来自:https://mlnotebook.github.io/post/CNN1/
从左上角开始,卷积核就对应着数据的3*3的矩阵范围,然后相乘再相加得出一个值。按照这种顺序,每隔一个像素就操作一次,我们就可以得出9个值。这九个值形成的矩阵被我们称作激活映射(Activation map)。这就是我们的卷积层工作原理。也可以参考下面一个动画:
其中,卷积核为
1 0 1
0 1 0
1 0 1
2.2池化层
池化过程在一般卷积过程后。池化(pooling) 的本质,其实就是采样。Pooling 对于输入的 Feature Map,选择某种方式对其进行降维压缩,以加快运算速度。
扫描的顺序跟卷积一样,都是从左上角开始然后根据你设置的步长逐步扫描全局。
2.3 两者对比
卷积层是对图像的一个邻域进行卷积得到图像的邻域特征,池化层(或者说 亚采样层 更好理解)就是使用 pooling(亚采样)技术将小邻域内的特征点整合得到新的特征。
3.卷积神经网络的输入与输出
图像分类指的是输入一张图像后,神经网络输出一个关于这个图像的类,或是图像属于某类的概率的任务。对人类而言,这是我们从出生那一刻起就开始不断学习的技能之一,而且随着年龄的增长,人们处理这种任务会越来越轻松自然。
无需二次思考,我们就能快速无缝识别身处的环境和周围的所有物体。当看到一幅图或是观察周围环境时,我们几乎是下意识地调用以往学习的所有知识,为场景中的各个对象一一打上标签。
但计算机不同。我们把图像输入计算机后,它“看”到的其实是一组像素值。这些像素值的数量会随图像的大小和分辨率发生改变,如果输入图像是一张JPG格式的彩色图像,它的像素为480×480,那么计算机得到的就是一个大小为480×480×3(这里3表示RGB值)的数组。
这个数组里的每一个值都介于0-225之间,描述了对应像素的强度。虽然这些值对分类任务来说毫无意义,但它们是计算机可以用的唯一输入。这就带出了另一个更直白的图像分类任务描述:它其实是把像素值数组作为输入,然后输出图像属于某一类的具体概率,如80%(猫)、15%(狗)、5%(鸟)。
4.卷积神经网络之层级结构
上图中CNN要做的事情是:给定一张图片,是车还是马未知,是什么车也未知,现在需要模型判断这张图片里具体是一个什么东西,总之输出一个结果:如果是车 那是什么车 所以最左边是数据输入层,对数据做一些处理,比如去均值(把输入数据各个维度都中心化为0,避免数据过多偏差,影响训练效果)、归一化(把所有的数据都归一到同样的范围)、PCA/白化等等。CNN只对训练集做“去均值”这一步。
最左边是
- 数据输入层,对数据做一些处理,比如去均值(把输入数据各个维度都中心化为0,避免数据过多偏差,影响训练效果)、归一化(把所有的数据都归一到同样的范围)、PCA/白化等等。CNN只对训练集做“去均值”这一步。
中间是
- CONV:卷积计算层,线性乘积 求和。
- RELU:激励层,上文2.2节中有提到:ReLU是激活函数的一种。
- POOL:池化层,简言之,即取区域平均或最大。
最右边是
-
FC:全连接层
5.激活函数
常见的激活函数有sigmoid、tanh、relu等等
引入一个最简单的sigmoid函数进行讲解
Sigmoid
函数将输入的值转换为(0,1),如果输入是非常小的负数,那么输出就是0;如果输入是非常大的正数,输出就是1。其计算公式如下:
f(x) = 1 / (1 - e^(-x))
同时该激活函数的特点如下:
- 收敛缓慢
- 边界介于0和1之间
- 梯度反向传递时可能会导致梯度消失
我们重点观察其导数图像,如下所示:
上述图像中,梯度值仅在-3到3范围内有效,而该曲线图在其他区域变得非常平坦。这意味着,对于大于3或小于-3的值,函数将具有非常小的梯度。当梯度值接近零时,网络将停止学习,此时将导致梯度消失问题。
6.计算公式
卷积计算公式如下:
式中参数:
i--输入尺寸;
o---输出尺寸;
p---padding;
K--- kernel_size;
s---stride。
(2)计算实例
输入图片:假设一张7*7的图片,如下图:
卷积核大小:假设一张3*3(k=3)的卷积核,如下图:
参数设置: 步长S=2;p=0---舍弃
计算过程: [(7+2*0-3)/2}+1 =3
输出图片:输出的图像为3*3
计算过程:
总体过程如下
博文学习:(55条消息) 浅谈CNN中的激活函数_赵卓不凡的博客-CSDN博客_cnn激活函数
(55条消息) 卷积层与池化层_Aliz_的博客-CSDN博客_卷积层和池化层
实例运行:猫狗分类:CNN实现猫狗分类 - 飞桨AI Studio (baidu.com)