最近将以前所学的卷积方面知识复习一下
卷积层 Convolution Layers 是为了提取图像特征
我对于卷积的学习,是从B站上一个up主学习的([土堆说卷积操作(可选看)_哔哩哔哩_bilibili] (www.bilibili.com/video/BV1hE…
在pytorch的官方文档上,可以看到卷积的参数如下
就是一个输入通道数,一个输出通道数,
一个kernel_size(卷积核尺寸,也可以说是权重weight),int=3,就是3×3的矩阵;
stride步幅,就是卷积核在图像上移动的距离,默认是1;
pandding就是在输入图像上四边填充的像素数,主要是为了stride移动时,输入图像像素不够的情况下的填充,默认值是0,
dilation是控制卷积核元素之间的距离,默认值是1(空洞卷积);
bias,偏置,一般不加,后面加了BN层,就不用加了,因为BN层会抵消bias;
ceil—mode,true是ceil模式,false是flood模式,就是向上取整或者向下取整;
卷积核的数值分别与图像上的像素值相乘,就是输出值
卷积层会根据公式计算不同参数值下输入、输出图像的值
例如,3@32×32->32@32×32,宽高不变,通道变成32, 假如使用一个5×5的卷积核,
所以采用(3,32,5,1,2)
假如要用一个7×7的卷积核,把3@600×600变成64@300×300
这里为什么会说padding太大了呢?
因为0<=pading<=(kernrl_size)/2,padding不大于卷积核的一半
而stride取2,padding取3的时候,结果不是整数,为什么还能变成整数呢?
因为卷积层和池化层不一样,卷积是向下取整,池化是向上取整
当stride=2,padding=3时,结果是299.5,向下取整变成299,就符合了
再例如,宽高从416->208,k=3时怎么办? (416+2p-1*(3-1)-1)/s+1=208
if s=1,(413+2p)/1=207,p不能小于0;
if s=2,(413+2p)/2=207,p=1,415/2=207.5,向下取整=207;
以上就是我关于卷积的学习笔记,如果有不对的地方,可以找我交流。