最近在研究卷积神经网络,很多卷积操作里头都会有padding这个选项,以keras中的Conv2D为例,padding操作有valid,same,casual等,我只讨论same和valid这两种模式,casual以后遇到再说。
假设模型的输入维度为n,kernel size为k,步长为s,输出维度为m。
same padding
当strides=1时,利用same padding操作,模型的输入层和输出层的维度是一致的,我觉得这也是之所以叫"same"这个名字的原因,具体的输出维度如下:
m
=
⌈
n
s
⌉
m=\lceil \frac{n}{s} \rceil
m=⌈sn⌉
测试代码如下:
import keras
from keras.layers import Conv2D,Input
a=Input(shape=(60,60,1))
conv_samepadding=Conv2D(1,(3,3),strides=(7,7),padding='same')
conv_validpadding=Conv2D(1,(3,3),strides=(7,7),padding='valid')
samepadding_a=conv_samepadding(a)
validpadding_a=conv_validpadding(a)
print(conv_samepadding.output_shape)
print(conv_validpadding.output_shape)
valid padding
valid padding没有填充操作,输出维度的计算公式如下:
m
=
⌊
n
−
k
s
⌋
+
1
m=\lfloor \frac{n-k}{s} \rfloor+1
m=⌊sn−k⌋+1
参考资料1