卷积神经网络(CNN)基础概念
卷积神经网络与一般全连接层神经网络的区别在于:全连接层(Dense层)学到的是全局模式,而卷积网络通过对局部的卷积运算,学习到的实际是局部模式。这样通过多次卷积,就能学习到越来越复杂和抽象的视觉概念。
常规步骤:
(1)数据输入层( Input layer)
(2)卷积计算层(conv layer)
(3)池化层 (pooling layer)
(4)全连接层 (Dense)
定义一个卷积层:
tensorflow:
conv=tf.nn.conv2d(input, (3,3,3,16), strides=[1, 1 , 1 , 1],padding=’SAME’)
keras:
x=layers.Conv2D(16, (3, 3), activation='relu')(x)
可以看出卷积运算由两个关键参数组成:(1)从输入中提取的图块尺寸(本例中3×3);(2)输出特征图的深度(即是卷积核的数目,也等于输出的维度,本例16)
1. 卷积运算(conv)
原理:在输入的特征图上滑动你设置的小方块(通常为3×3或者5×5,又称为卷积核),每一次输入图与卷积核对应部分做乘积(注:不是矩阵相乘,而是对应元素相乘,然后求和),然后根据步幅(即所设置的每次卷积块滑动的距离)滑动到下一位置,做相同运算。直至遍历完整个输入。这样就完成了一次卷积操作。如下图:(图中虚线部分是采用了填充,以确保输出和输入同维度)
2. 激活函数(activiation)
作用是把卷积层输出结果做非线性映射。
RELU激活函数:f(x)=max(0,x)。特点是:收敛快,容易求导计算。
3.池化(pooling)
也是下采样的一种,与步进卷积类似。又分为最大池化、平均池化等等。以最大池化为例:是从输入特征图中提取窗口,并输出每个通道的最大值。直至完成对整个特征图的操作。最大池化与卷积的最大不同之处在于,最大池化通常使用 2×2 的窗口和步幅 2,其目的是将特征图下采样 2 倍。与此相对的是,卷积通常使用 3×3 窗口和步幅 1。
通过池化操作,能够减少输入层的参数,以避免造成过拟合。