总结:
1:转置卷积可以用正常卷积来理解,对于没有padding的卷积来说,其转置卷积等同于
a: 对输入进行四边补零,单边补零的数量为k-1
b:将卷积核旋转180°,在新的输入上进行直接卷积
补零的原因其实是为了保证数据之间的空间连接关系,可以参考第2点的参考文章。
参考自:(4条消息) 抽丝剥茧,带你理解转置卷积(反卷积)_史丹利复合田的博客-CSDN博客_转置卷积
2:当卷积涉及到补零以及strides不等于1的情况的时候,其转置卷积步骤如下:
这里要对转置卷积的输入进行插值补零等操作,原因是要保证数据之间的空间连接性:
另外有一点要注意的是转置卷积的步长strides始终等于1。
参考自:关于转置卷积(反卷积)的理解 - 午夜稻草人 - 博客园 (cnblogs.com)
逆卷积的详细解释ConvTranspose2d(fractionally-strided convolutions) - 慢行厚积 - 博客园 (cnblogs.com)
3:如果只是想简单了解nn.Conv2DTranspose怎么用的话,参考:
(4条消息) nn.ConvTranspose2d 怎么理解怎么用_TangXin95的博客-CSDN博客
但这里有个问题,转置卷积和正常卷积时候的输入输出通道应该正好相反:如下:
还有一点需要说明,通过第1点我们知道,转置卷积核和正常卷积核的形状是一样的,所以我们可以保证两者值一样,直接赋值就好了: