LoginSignup
15
13

More than 5 years have passed since last update.

[Chainer, PyTorch] Deconvolutionの出力サイズの計算式

Last updated at Posted at 2018-11-30

chainerでDeconvolutionの出力サイズの計算がよくわからなかったのでメモ
pytorchの方のドキュメントを漁ったら出て来ました

pytorchの場合

こちらはちゃんとドキュメントに幅と高さの計算方法を書いてくれてます
https://pytorch.org/docs/stable/nn.html#torch.nn.ConvTranspose2d

class torch.nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True, dilation=1)
\begin{align}
    H_{out} &= (H_{in} - 1)\times stride[0] - 2 \times pad[0] + ksize[0] + output\_padding[0] \\ 
    W_{out} &= (W_{in} - 1)\times stride[1] - 2 \times pad[1] + ksize[1] + output\_padding[1]
\end{align}

chainerの場合

ドキュメントには書いていないですが、ソースコードを見るとほぼ同じであることがわかります
https://docs.chainer.org/en/stable/reference/generated/chainer.links.Deconvolution2D.html


class chainer.links.Deconvolution2D(self, in_channels, out_channels, ksize=None, stride=1, pad=0, nobias=False, outsize=None, initialW=None, initial_bias=None, *, groups=1)
\begin{align}
    H_{out} &= (H_{in} - 1)\times stride[0] - 2 \times pad[0] + ksize[0] \\ 
    W_{out} &= (W_{in} - 1)\times stride[1] - 2 \times pad[1] + ksize[1]
\end{align}

chainerはpytorchと違ってoutput_paddingがありません。
そのため、$H_{in}$とksizeが共に奇数の場合、

\begin{equation}
H_{out} = (奇数-1)\times stride[0] - 2\times pad[0] + 奇数 = 奇数
\end{equation}

より、$H_{out}$は奇数にしかなりません
$H_{out}$を偶数にしたい場合は、ksizeの方を変える必要が生じる場合がありそうです
(GANのコードとかだとdeconvolutionでconvolutionとksizeが違う場合は多々あるのでまあ良いのでは?)

15
13
1

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
15
13