卷积层维度计算与设置
卷积结构
CNN结构:
Input(输入层)----> Conv(卷积)---->Relu(激活)---->Pool(池化)---->FC(全连接)
输入层参数介绍:
- batch_size:相当于一次训练的样本数
- weight/height:图片宽和高
- channels:图片通道数,1是黑白,3是RGB
卷积层参数介绍:
- filter = 卷积核(1x1,3x3,5x5)
- feature map = 卷积之后得到的输出结果
- weight/height:卷积核大小
- in_channel: 等于输入图片的通道数(这个是可以根据自己的需要来设置的)
- out_channel: 等于输出通道数
- padding:填充值,在输入特征图的每一边添加一定数目的行列,使得输出的特征图的长、宽 = 输入的特征图的长、宽
- stride:步长,卷积核经过输入特征图的采样间隔
卷积计算公式:
N 输出大小 = (W输入大小 − Filter + 2Padding )/Stride+1
反卷积计算公式:
N 输出大小 = (W输入大小 − 1 )*Stride+Filter - 2 *Padding
注意:卷积向下取整,池化向上取整。
池化层参数介绍:
- Filter : 卷积核大小
- stride:步长,卷积核经过输入特征图的采样间隔
池化计算公式:
输出大小 = (输入大小 − Filter)/Stride+1
作用:
maxpooling有局部不变性而且可以提取显著特征的同时降低模型的参数,从而降低模型的过拟合。
因为只是提取了显著特征,而舍弃了不显著的信息,是的模型的参数减少了,从而一定程度上可以缓解过拟合的产生。
如何选择卷积核大小、个数、层数?
1. 卷积核大小:
理论上来说,卷积核的大小可以是任意的,但绝大部分的CNN中使用的卷积核都是奇数大小的正方形,如1x1,3x3,5x5,7x7,11x11等,也有长方形的卷积核,如Inceptionv3中3x3的变成1x3和3x1。
大小选择一般为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