大部分转自:https://blog.youkuaiyun.com/qq_36444039/article/details/103984502
笔者以前搭建深度学习模型的时候,对于每一步卷积池化后图片的尺寸和大小很迷茫,不知道如何计算的。
这里,我给大家分享几个公式,帮助大家理解。不明白的欢迎在下方留言。
1、卷积层(Conv Layer)的输出张量(图像)的大小
定义如下:
O=输出图像的尺寸。
I=输入图像的尺寸。
K=卷积层的核尺寸
N=核数量
S=移动步长
P =填充数
输出图像尺寸的计算公式如下:
上述公式的 分式部分 向下取整
公式推导
:画出图片,将卷积核顶在图片的最左上角,从卷积核的右边缘开始考虑。
卷积核的右边缘位于第K个位置,还剩下L-K+2*P个位置可以去移动,一次向右移动S步。
所以,卷积核还能移动(I-K+2P)\S (向下取整)
步。再加上本身就处在的位置,所以总共是(I-K+2P)\S(下取整)+1
如果需要保持原来的尺寸
:通常S = 1,K = 2P+1, 如padding为0, kernel为1,padding为1,kernel为3
如果需要尺寸减小为原来的一半(DCGAN实现的discriminator有)
:通常S = 2,K = 2P+2, 如padding为0kenerl为2,padding为1,kernel为4
2、池化层(MaxPool Layer)的输出张量(图像)的大小
定义如下:
O=输出图像的尺寸。
I=输入图像的尺寸。
S=移动步长
PS=池化层尺寸
输出图像尺寸的计算公式如下:
有了上述公式以后,我特地跑到b站看了相关视频,套入公式后,发现和我们的理解一样。
公式推导
:和上面卷积层的推导十分相似,把pooling移动类比kernel移动即能明白。
如果需要尺寸减小为原来的一半
: stride = 2, kernel = 2, 也即是maxpool的默认参数