CNN中卷积层和池化层分别起什么作用?卷积神经网络的工作过程

卷积神经网络CNN结构中需要重点理解的是卷积层以及池化层。在本文中,并没有全部介绍每个层的含义。重点介绍了卷积层Conv2D以及最大池化层MaxPooling2D,以及参数的含义。

CNN架构

卷积神经网络CNN的结构一般包含这几个层:

  • 输入层:用于数据的输入
  • 卷积层:使用卷积核进行特征提取和特征映射
  • 激励层:由于卷积也是一种线性运算,因此需要增加非线性映射
  • 池化层:进行下采样,对特征图稀疏处理,减少数据运算量。
  • 全连接层:通常在CNN的尾部进行重新拟合,减少特征信息的损失
  • 输出层:用于输出结果

当然中间还可以使用一些其他的功能层:

  • 归一化层(Batch Normalization):在CNN中对特征的归一化
  • 切分层:对某些(图片)数据的进行分区域的单独学习
  • 融合层:对独立进行特征学习的分支进行融合

卷积层Conv2D

三个参数:

  • ksize:卷积核的大小
  • strides:卷积核移动的跨度
  • padding:边缘填充

在代码中,使用Conv2D来进行卷积。具体的代码:

from tensorflow import keras
from tensorflow.keras import layers

layers.Conv2D()

Conv2D相关的参数:

layers.Conv2D(
    filters,
    kernel_size,
    strides=(1, 1),
    padding='valid',
    data_format=None,
    dilation_rate=(1, 1),
    groups=1,
    activation=None,
    use_bias=True,
    kernel_initializer='glorot_uniform',
    bias_initializer='zeros',
    kernel_regularizer=None,
    bias_regularizer=None,
    activity_regularizer=None,
    kernel_constraint=None,
    bias_constraint=None,
    **kwargs,
)
  • kernel_size:是核的大小,一般是3X3或者5X5之类的卷积核
  • strides : 跨度,就是每次移动多少,默认是(1,1),表示X方向和Y方向两个方向的移动跨度是1
  • padding :表示填充,有两种参数,分别是validsame,补零策略,当padding = same时,对边缘的地方全零填充,当padding = valid,则不进行填充。
  • activation:表示激活

卷积核的运行过程

最大池化层MaxPooling2D

池化层是为了降采样。这样做的重要原因之一是,一旦我们知道给定特征在一个给定的输入区域,我们可以忽略特征的确切位置将数据普遍化,减少过拟合。举个例子,即使训练精度达到99%,但拿到没见过的新数据上测试时,它的精确度也只有50%。

tf.layers.MaxPooling2D是用来实现最大池化的功能。

例如,在下面的这个例子里面,选择了一个2X2的卷积层,那么就是在每个2X2的区域里找多大的,分别为6、8、3、4。这样原本4X4的图像就变成了2X2的图像。

池化层

来瞅一眼MaxPooling2D里的相关参数:

layers.MaxPooling2D(
    pool_size=(2, 2),
    strides=None,
    padding='valid',
    data_format=None,
    **kwargs,
)

基本和卷积层里的参数含义一样。

卷积神经网络的整体框架

卷积神经网络实际上是一个反复变小变厚的过程:

卷积神经网络的过程

卷积的案例


参考资料:

CNN(卷积神经网络)是什么?有何入门简介或文章吗?

卷积神经网络可视化,真的很像神经元!


博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/CNN2.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 09 月 15 日
如果觉得我的文章对你有用,请随意赞赏