问题描述
之前在用Conv2d这个函数的时候padding这个参数都是设置为一个整数,但是最近遇到了这样一行代码。如图所示
大家可以看到在上面的卷积函数中,padding后面跟的不再是一个具体的整数,而是接了一个元组(元组中数据类型依旧是整数)。
并且在官方文档中padding后面的参数也是跟了一个整数。当padding只是一个整数时大家应该能明白,在这里就不赘述,所以分享一下我自己对于这样一个操作的一些实验及其理解。
相关理解
实验是检验真理的唯一标准,所以话不多说,直接上实验的截图。
这里首先我先设出了一个维度为4的tensor——a,用来模拟我们平常的输入批量大小的样本。
接一下我去定义一个卷积层b,这里可以看到输入通道为3,输出通道为6,卷积核大小为2,那么这里的padding我定义的是(1,2)。那么就让我们来看一下输出c的大小吧。
其中,c的前两个维度非常好理解,第一个是样本个数(和输入样本数保持不变),第二个是输出通道,和我们卷积核定义的相对应。那么关键在于这个时候c的每一个feature map的大小是5×8的,而我们一开始定义的是4×5的。所以接下来让我们用徒手的方式给大家展示一下我的理解。
在展示图片之前有个小问题需要注意,就是我们这里输出虽然是5×8,但是这是卷积之后的输出,所以我们通过计算可以得到在经过padding之后的图片应该是6×9的。
上面的长方形长4宽5,下面的长6宽9,我在下面的长方形中将原来的长方形用红笔描了出来。这样我们就可以理解,padding = (1,2)。其中1是在左右各补一列,2是在上下各补两列。