LoginSignup
2
0

More than 1 year has passed since last update.

PythorchのConvTranspose2dのパラメータ設定方法

Last updated at Posted at 2022-05-11

1. はじめに

GANの生成の際などに用いるPytorchのConvTranspose2dの使い方について、
色々と調べたりしましたので、簡単にまとめておこうと思います。

2. ConvTranspose2Dのパラメータ

Conv2dの逆変換を行うConvTranspose2Dは、その変換前のConv2Dの際のパラメータと同じものを用いるようです。

image.png

Conv2d
no_padding_no_strides.gif

ConvTranspose2d
no_padding_no_strides_transposed.gif

Conv2dの感覚でConvTranspose2dを見ると、パディングのパラメータが0でないように見えます。しかし、ConvTranpose2dのパディングのパラメータは、Conv2dの際にパディングをしているかどうかによって決定します。他にも例を見たい方はこちらのサイトをご参照ください。

3. 出力サイズの導出

出力サイズは以下の数式で導き出されます。

\begin{align}
&Input : (N, C_{in}, H_{in}, W_{in}) \; or \; (C_{in}, H_{in}, W_{in})\\
&Output : (N, C_{out}, H_{out}, W_{out})\; or \; (C_{out}, H_{out}, W_{out}), where
\end{align}
\begin{align}
H_{out} &= (H_{in}-1) \times stride[0] - 2 \times padding[0] + dilation[0] \times (kernel\_size[0]-1) + output\_padding[0] + 1\\


W_{out} &= (W_{in}-1) \times stride[1] - 2 \times padding[1] + dilation[1] \times (kernel\_size[1]-1) + output\_padding[1] + 1
\end{align}

image.png

この数式を単体で理解するのは難しいですが、Conv2dの以下の数式の逆変換と考えると理解しやすいと思います。

H_{out} = \lfloor \frac{H_{in} + 2 \times padding[0] - dilation[0] \times (kernel\_size[0]-1) -1}{stride[0]} + 1 \rfloor\\
W_{out} = \lfloor \frac{W_{in} + 2 \times padding[1] - dilation[1] \times (kernel\_size[1]-1) -1}{stride[1]} + 1 \rfloor

このとき、output_paddingだけはConvTranspose2dでしか出現しない変数となります。
これはoutput shapeをコントロールするように、出力の片側に追加するもののようです。

4.まとめ

今回はPytorchのConvTranspose2dのパラメータ設定について、覚書程度にまとめました。
自分でGANやVAEのネットワーク構築をするときがあれば、使えればと思います。

2
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0