背景
たとえば、図1なようなConvolutional Autoencoderを作ろうとしたら(入力=出力)、Conv層のパラメタなどは簡単ですが、それを適当に設定しておくと、後でDeconvのパラメタの設計がすごく困ることになる。ここでCon2d,Deconv2d, pooling, uppoolingの入力、出力次元の計算方法をまとめます。
Note
$S_{input}$ : 層の入力次元
例:(28,32)だと、$S_{input_w}$=28
$S_{input_h}$=32
$S_{output}$ : 層の出力次元
例:(28,32)だと、$S_{output_w}$=28
$S_{output_h}$=32
$S_{filter}$ : 層のフィルタのサイズ
例:(3,2)だと、$S_{filter_w}$=3
$S_{filter_h}$=2
$P$ : Paddingのサイズ
例:(2,2)だと、$P$=2
$Stride$ : 進歩サイズ
例:(1,1)だと、$Stride$=1
$Range$ : Poolingサイズ
例:(2,2)だと、$Range$=2
$「」$: 整数以外を切り捨てる
例:$「14.9」=14$
Conv2dとPooling
Con2dとPoolingは同じ計算式なので一緒に書きます
Conv2d
$$
S_{output_w} = 「(S_{input_w}-S_{filter_w}+2P)/Stride+1」\
S_{output_h} = 「(S_{input_h}-S_{filter_h}+2P)/Stride+1」
$$
Pooling
$$
S_{output_w} = 「(S_{input_w}-Range+2P)/Stride+1」\
S_{output_h} = 「(S_{input_h}-Range+2P)/Stride+1」
$$
Deconv2dとUppooling
Deconv2dはConv2dと逆計算だけなので
Deconv2d
$$
S_{output_w} = 「Stride*(S_{input_w}-1)+S_{filter_w}-2P」\
S_{output_h} = 「Stride(S_{input_h}-1)+S_{filter_h}-2*P」
$$
Uppooling
$$
S_{output_w} = 「Stride*(S_{input_w}-1)+Range-2P」\
S_{output_h} = 「Stride(S_{input_h}-1)+Range-2*P」
$$
まとめ
変換ツールを作りましたが、計算が簡単なので必要がないでしょうね