【轩说AI】转置卷积

转置卷积 Transposed Convolution

在我学转置卷积的时候,csdn上很多人没有讲清楚,其实很简单,这篇文章让你五分钟明白什么是转置卷积。

转置卷积的直观计算

卷积不会增大输入的高和宽,通常要么不变,要么减半。而转置卷积则可以用来增大输入高宽。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r5LGPP8W-1677474229043)(./转置卷积  Transposed  Convolution.assets/image-20230224142426743.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1WiyoRCK-1677474229045)(./转置卷积  Transposed  Convolution.assets/image-20230224142430734.png)]

转置卷积也是一种卷积

计算机可以用计算“卷积”的方式来计算“转置卷积”,假设s为步长,p为单侧padding长度,k为kernel边长

  • 在行和列之间插入 s − 1行和列(内填充)
  • 外填充 k − p − 1
  • 将核矩阵上下、左右翻转
  • 然后做正常卷积(填充 0、步幅 1)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AdeWeKyJ-1677474229045)(./转置卷积  Transposed  Convolution.assets/image-20230224142435249.png)]

大小关系

设转置卷积前的矩阵边长为n0,转置卷积后的为n1,则有:
n 1 = ( n 0 − 1 ) s + k − 2 p n_1=(n_0-1)s+k-2p n1=(n01)s+k2p
如若将转置卷积后的矩阵n1经过转置变为n0,则有:
n 0 = ⌊ ( n 1 + 2 p − k ) / s ⌋ + 1 n_0=\lfloor(n_1+2p-k)/s\rfloor +1 n0=⌊(n1+2pk)/s+1
可见由于卷积的性质,有“下取整”的存在,会导致多个n1对应到同一个n0,这也就说明,当我们做转置卷积时,由n0计算得到的n1是所有【经过卷积得到n0的n1中,最小的那个(也就是能整除的那个)】。所以当我们计算转置卷积时,需要加入out padding,来修正得到的n1以达到我们想要的输出大小。

在Pytorch中,修正后的公式为:
n 1 = ( n 0 − 1 ) s + k − 2 p + O u t p u t P a d d i n g n_1=(n_0-1)s+k-2p+OutputPadding n1=(n01)s+k2p+OutputPadding
这里的output-padding不乘2,是为了“细致修改”,如果乘2,那就每次加偶数个填充了,依然会有取不到的n1值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值