卷积、池化操作的尺寸变化
用代码看下各层信息(以ResNet18为例)
model=models.resnet18(weights=models.ResNet18_Weights.IMAGENET1K_V1) #初始化模型 print(model) #查看模型层信息 summary(model,(1,3,224,224)) #输入输出信息
从上图得知,用了64个3通道的卷积核(尺寸7,步长2,扩充3)、池化核尺寸3步长2扩充1
对于(1,3,224,224)的输入,卷积后输出64个112*112的特征图,池化后输出64个56*56的特征图
卷积和池化后尺寸计算公式,默认向下取整
三个关键词:
-
- kernel_size——卷积核大小
- padding——边缘扩充,一般四周填充0
- stride——卷积核移动步长
卷积核会按步长遍历图像,把卷积核框住的像素进行卷积(对应像素相乘求和)得到1个中心像素值(例如3*3的核9个像素用1个像素代表)。卷积就是把卷积核范围内的像素变成中心一个像素。
为了使卷积核的中心可以遍历边缘的像素,所以通过padding扩充原图。
另一个案例
上图中网络结构:2个卷积层(Convolutions)+2个池化层(Subsampling)+3个全连接层(Full connection)
上图中数据的计算:
32*32如何得到28*28,5*5的卷积核(默认步长为1,无pading)遍历图像,图像边缘处上下左右各丢失2行(列)像素,所以32-4=28。
14*14如何得到10*10,计算同上,14-4=10。
28*28→14*14与10*10→5*5是如何得到的,下述代码中池化层设置的是2,即图像大小除2
@前的1→6→16是如何得到的,1是32*32的原图为单通道(RGB图要写成3),6、16是下述代码中卷积层设置的。
16@5*5即400→120→84→10是如何得到的,120、84是下述代码中全连接层设置的,10是类别数(即分10类问题,如果是分猫狗两类,那就是2)
值得注意的是上图的16@5*5中的5*5(下图绿框)是计算出来的:1、10是单通道图,10分类问题。其他数据可以自己设定。
32*32原图→经5*5卷积→28*28图→经池化层参数2→14*14图→经5*5卷积→10*10图→经池化层参数2→5*5图