PyTorch: Conv2d and ConvTranspose2d

本文介绍了PyTorch中的ConvTranspose2d如何实现Conv2d的逆过程,详细阐述了计算dx的方法,并探讨了在设置padding和output_padding时的注意事项,以在CNN GAN中正确应用ConvTranspose2d。
摘要由CSDN通过智能技术生成

ConvTranspose2d 实现的是 Conv2d 的逆过程,也就是将一张 m × m m \times m m×m 的图片,upsampling 到 n × n n \times n n×n,这里 n > m n > m n>m。 ConvTranspose2d 的实现方法,与 Assignment 2 | ConvolutionalNetworks 计算 dx 的方法完全相同。实际上,不论在 PyTorch 还是在 TensorFlow 里面,ConvTranspose2d 的实现和计算 dx 的梯度的实现,使用的是同一段代码。在 PyTorch 的文档里明确说明了这一点:

This module can be seen as the gradient of Conv2d with respect to its input.

这里先把 Conv2d 中计算 dx 的方法写一下:

dx 的计算方法

这里写出 dx 和 dw 的闭式解很复杂,而且不容易写出代码,所以这里用一个例子来推出 dx 和 dw 的计算过程,根据此计算过程可以将代码写出。这里 stride = 1,pad = 0,x,w,y为:
x = [ x 11 x 12 x 13 x 21 x 22 x 23 x 31 x 32 x 33 ] , w = [ w 11 w 12 w 21 w 22 ] , y = [ y 11 y 12 y 21 y 22 ] x = \begin{bmatrix} x_{11}& x_{12}& x_{13}\newline x_{21}& x_{22}& x_{23}\newline x_{31}& x_{32}& x_{33} \end{bmatrix}, \quad w = \begin{bmatrix} w_{11}& w_{12}\newline w_{21}& w_{22} \end{bmatrix}, \quad y = \begin{bmatrix} y_{11}& y_{12}\newline y_{21}& y_{22} \end{bmatrix} x=[x11x12x13x21x22x23x31x32x33],w=[w11w12w21w22],y=[y11y12y21y22]
y = x × w y = x \times w y=x×w 展开:
y 11 = w 11 x 11 + w 12 x 12 + w 21 x 21 + w 22 x 22 y 12 = w 11 x 12 + w 12 x 13 + w 21 x 22 + w 22 x 23 y 21 = w 11 x 21 + w 12 x 22 + w 21 x 31 + w 22 x 32 y 22 = w 11 x 22 + w 12 x 23 + w 21 x 32 + w 22 x 33 \begin{aligned} y_{11} &= w_{11}x_{11} + w_{12}x_{12} + w_{21}x_{21} + w_{22}x_{22} \newline y_{12} &= w_{11}x_{12} + w_{12}x_{13} + w_{21}x_{22} + w_{22}x_{23} \newline y_{21} &= w_{11}x_{21} + w_{12}x_{22} + w_{21}x_{31} + w_{22}x_{32} \newline y_{22} &= w_{11}x_{22} + w_{12}x_{23} + w_{21}x_{32} + w_{22}x_{33} \newline \end{aligned} y11=w11x11+w12x

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值