卷积层维度计算与设置

卷积结构

CNN结构:

Input(输入层)----> Conv(卷积)---->Relu(激活)---->Pool(池化)---->FC(全连接)

输入层参数介绍:

  1. batch_size:相当于一次训练的样本数
  2. weight/height:图片宽和高
  3. channels:图片通道数,1是黑白,3是RGB

卷积层参数介绍:

  1. filter = 卷积核(1x1,3x3,5x5)
  2. feature map = 卷积之后得到的输出结果
  3. weight/height:卷积核大小
  4. in_channel: 等于输入图片的通道数(这个是可以根据自己的需要来设置的)
  5. out_channel: 等于输出通道数
  6. padding:填充值,在输入特征图的每一边添加一定数目的行列,使得输出的特征图的长、宽 = 输入的特征图的长、宽
  7. stride:步长,卷积核经过输入特征图的采样间隔

卷积计算公式:
N 输出大小 = (W输入大小 − Filter + 2Padding )/Stride+1
反卷积计算公式:
N 输出大小 = (W输入大小 − 1 )*Stride+Filter - 2 *Padding
注意:卷积向下取整,池化向上取整。

池化层参数介绍:

  1. Filter : 卷积核大小
  2. stride:步长,卷积核经过输入特征图的采样间隔

池化计算公式:
输出大小 = (输入大小 − Filter)/Stride+1

作用:
maxpooling有局部不变性而且可以提取显著特征的同时降低模型的参数,从而降低模型的过拟合。
因为只是提取了显著特征,而舍弃了不显著的信息,是的模型的参数减少了,从而一定程度上可以缓解过拟合的产生。

如何选择卷积核大小、个数、层数?

1. 卷积核大小:

理论上来说,卷积核的大小可以是任意的,但绝大部分的CNN中使用的卷积核都是奇数大小的正方形,如1x1,3x3,5x5,7x7,11x11等,也有长方形的卷积核,如Inceptionv3中3x3的变成1x3和3x1。
为什么CNN中的卷积核一般都是正方形,没有长方形?

大小选择一般为3x3的较多,越小越好,降低参数数量,降低复杂度。多个小卷积核比一个大卷积核好,原因有两点:

1.减少了参数量
2.3个3x3卷积核=1个7x7卷积核=1个5x5卷积核

以Mnist为例,图片28x28,使用5x5的卷积核,stride=1对其卷积,Result=(28-5)/1+1=24
用两个3x3卷积核:
(28-3)/ 1+1=26
(26-3)/ 1+1=24
在这里插入图片描述

2. 卷积核的个数

等于输出特征图的通道数,卷积核的数量越多,意味着提取的特征种类越多,通常会取2^n个,按照16的倍数倍增

3.卷积层数

卷积层数设置,选最好性能的那个模型,它是几层那就设置几层。 这个是训练数据,激活函数,梯度更新算法等多方面的影响,也不是简单就试出来的。

4. Padding选择

参考一个ppt发现:
在这里插入图片描述

卷积核为3时 padding 选择1
卷积核为5时 padding 选择2
卷积核为7时 padding 选择3
上述只是原则上的设置,实际上还是按模型该有的参数设置比较好,毕竟人家都调参优化好了。。。。

5.Stride选择

步长通常不会超过卷积核宽度或长度,步长大于1的时候有下采样的效果,比如步长为2时,可以让feature map的尺寸缩小一半。

LeNet参数举例

在这里插入图片描述

AlexNet参数举例

在这里插入图片描述

VGG参数举例

在这里插入图片描述

Reference

1.卷积神经网络的卷积核大小、卷积层数、每层map个数都是如何确定下来的呢?
2. CNN中stride(步幅)和padding(填充)的详细理解
3. 卷积神经网络的参数计算
4. 卷积神经网络中各个卷积层的设置及输出大小计算的详细讲解

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐