Pytorch 转置卷积nn.ConvTranspose2d 参数设置总结

本文总结Pytorch中用转置卷积还原卷积过程的参数设置。

直接上栗子,卷积过程:
5×5输入特征图,步长 s = 2 s=2 s=2,卷积核 k = 3 k=3 k=3,填充 p = 1 p=1 p=1

输出特征图为 5 − k + 2 p s + 1 = 3 \displaystyle \frac{5-k+2p}{s}+1=3 s5k+2p+1=3

在这里插入图片描述
转置卷积过程如上图:

  1. 3×3特征图内部填充:相邻2行/列间插入 s − 1 s-1 s1行/列0值
  2. 3×3特征图外部填充: p a d d i n g = k − p − 1 padding=k-p-1 padding=kp1
  3. 卷积核同 k k k,步长始终为1。

注:图像转置卷积的方法并不止一种,上述解释只适用于大部分常见情况。

看一下Pytorch中转置卷积nn.ConvTranspose2d()的主要参数:

in_channels: int,
out_channels: int,
kernel_size: _size_2_t,
stride: _size_2_t = 1,
padding: _size_2_t = 0,
output_padding: _size_2_t = 0,

注意:参数kernel_size,padding,stride指的都不是转置卷积中的,而是卷积过程的,转置卷积中的填充不需要自己算,Pytorch帮我们解决了……也就是说这3个参数,卷积的时候填啥,转置卷积就填啥,开心~

最后解释一下参数output_padding。在栗子中,如果将输入特征图尺寸改为6×6,根据公式,输出依然为3×3,不够步长的最后1行/列会被舍弃。这样的话,转置卷积依然得到5×5就没有达到还原的目的,也无法一一对应。
因此,参数output_padding=1的含义就是在扩张3×3特征图时,再加上1行1列的填充。在这里插入图片描述
总 之 \color{red}{总之} ,卷积计算公式中出现向下取整的情况,就需要设定output_padding=卷积时舍弃的行/列数。

牛刀小试
4×4输入特征图,步长 s = 1 s=1 s=1,卷积核 k = 3 k=3 k=3,填充 p = 0 p=0 p=0
输出特征图为 4 − k + 2 p s + 1 = 2 \displaystyle \frac{4-k+2p}{s}+1=2 s4k+2p+1=2

那么转置卷积时,2×2特征图内部填充为 s − 1 = 0 s-1=0 s1=0,外部填充为 k − p − 1 = 2 k-p-1=2 kp1=2,卷积时没有向下取整,参数output_padding=0。
在这里插入图片描述

  • 15
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值