LoginSignup
1
3

More than 5 years have passed since last update.

Convolutional autoencoderのための各層の入出力次元の計算

Last updated at Posted at 2018-06-26

背景

conv_deconv.png
図1. Convolutional Autoencoder

たとえば、図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}+2*P)/Stride+1」\\
S_{output_h} = 「(S_{input_h}-S_{filter_h}+2*P)/Stride+1」
$$

Pooling

$$
S_{output_w} = 「(S_{input_w}-Range+2*P)/Stride+1」\\
S_{output_h} = 「(S_{input_h}-Range+2*P)/Stride+1」
$$

Deconv2dとUppooling

Deconv2dはConv2dと逆計算だけなので

Deconv2d

$$
S_{output_w} = 「Stride*(S_{input_w}-1)+S_{filter_w}-2*P」\\
S_{output_h} = 「Stride*(S_{input_h}-1)+S_{filter_h}-2*P」
$$

Uppooling

$$
S_{output_w} = 「Stride*(S_{input_w}-1)+Range-2*P」\\
S_{output_h} = 「Stride*(S_{input_h}-1)+Range-2*P」
$$

まとめ

変換ツールを作りましたが、計算が簡単なので必要がないでしょうね

1
3
0

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
1
3