### CNNのモデル構築について質問です
CNNについて独学で勉強をしています。
自分で何かを検出するプログラムを組みたくてAlexNetというモデルを参考にして実際に自分でモデル構築しようとしているのですが、AlexNetでわからないことがあったので質問させてもらいます。
http://tecmemo.wpblog.jp/2017/03/19/dl_alexnet/
上記のサイトを元に勉強しているのですが、まず疑問になったのが
pool2のプーリング層でフィルタサイズ(3,3)ストライド(2,2)で(13,13,256)と出力されるのはなぜでしょうか?
(6,6,256)ではないでしょうか?という疑問がまず一つと
少し基本の勉強の理解が追いついていないのでここからは基本の質問もあります、すいません。
入力する画像のサイズが小さい時(仮に32*32)、畳み込み層やプーリング層を何層も作ろうと思ってもすぐに出力されるサイズが小さくなって意味が無くなりますよね?
その場合の対処方法などはあるのでしょうか?
上記URLの出力数というのは使うフィルタの種類の数ということですか?(エッジやぼかし等の)
全結合層のノード数の設定はどのようにして行うのでしょうか?
多かったらどうなる少なかったらどうなるのか調べてもピンとこなかったのですいません。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
pool2のプーリング層でフィルタサイズ(3,3)ストライド(2,2)で(13,13,256)と出力されるのはなぜでしょうか?
その前の conv2 の行が誤植でその後の3行の整合性が取れなくなっているのだと思います。
conv2 のところは、padding=(2, 2) でその出力結果は (27, 27, 256) となって、その次の正規化層は形状変更しないので、同じく (27, 27, 256) です。
これをプーリングして (13, 13, 256) になります。
なので、その前の conv2、norm2 のところの出力サイズが間違っています。
Keras での実装例
python
1from keras.layers import (Activation, BatchNormalization, Conv2D, Dense, 2 Dropout, Flatten, MaxPooling2D) 3from keras.models import Sequential 4 5 6def AlexNet(): 7 model = Sequential() 8 9 model.add(Conv2D(96, kernel_size=(11, 11), strides=(4, 4), 10 activation='relu', input_shape=(227, 227, 3))) 11 model.add(BatchNormalization()) 12 model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2))) 13 14 model.add(Conv2D(256, kernel_size=(5, 5), 15 padding='same', activation='relu')) 16 model.add(BatchNormalization()) 17 model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2))) 18 19 model.add(Conv2D(384, kernel_size=(3, 3), 20 padding='same', activation='relu')) 21 model.add(Conv2D(384, kernel_size=(3, 3), 22 padding='same', activation='relu')) 23 model.add(Conv2D(256, kernel_size=(3, 3), 24 padding='same', activation='relu')) 25 model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2))) 26 27 model.add(Flatten()) 28 model.add(Dense(4096)) 29 model.add(Dropout(0.5)) 30 model.add(Dense(4096)) 31 model.add(Dropout(0.5)) 32 model.add(Activation('softmax')) 33 34 return model 35 36 37model = AlexNet() 38model.summary()
_________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d_1 (Conv2D) (None, 55, 55, 96) 34944 _________________________________________________________________ batch_normalization_1 (Batch (None, 55, 55, 96) 384 _________________________________________________________________ max_pooling2d_1 (MaxPooling2 (None, 27, 27, 96) 0 _________________________________________________________________ conv2d_2 (Conv2D) (None, 27, 27, 256) 614656 _________________________________________________________________ batch_normalization_2 (Batch (None, 27, 27, 256) 1024 _________________________________________________________________ max_pooling2d_2 (MaxPooling2 (None, 13, 13, 256) 0 _________________________________________________________________ conv2d_3 (Conv2D) (None, 13, 13, 384) 885120 _________________________________________________________________ conv2d_4 (Conv2D) (None, 13, 13, 384) 1327488 _________________________________________________________________ conv2d_5 (Conv2D) (None, 13, 13, 256) 884992 _________________________________________________________________ max_pooling2d_3 (MaxPooling2 (None, 6, 6, 256) 0 _________________________________________________________________ flatten_1 (Flatten) (None, 9216) 0 _________________________________________________________________ dense_1 (Dense) (None, 4096) 37752832 _________________________________________________________________ dropout_1 (Dropout) (None, 4096) 0 _________________________________________________________________ dense_2 (Dense) (None, 4096) 16781312 _________________________________________________________________ dropout_2 (Dropout) (None, 4096) 0 _________________________________________________________________ activation_1 (Activation) (None, 4096) 0 ================================================================= Total params: 58,282,752 Trainable params: 58,282,048 Non-trainable params: 704 _________________________________________________________________
入力する画像のサイズが小さい時(仮に32*32)、畳み込み層やプーリング層を何層も作ろうと思ってもすぐに出力されるサイズが小さくなって意味が無くなりますよね?
その場合の対処方法などはあるのでしょうか?
モデルによって (227, 227, 3) のように入力サイズは決まっているので、画像はモデルに入れる前にその大きさ (227, 227) にリサイズします。
もしデータセットの画像が (28, 28) のように小さいのであれば、リサイズするか、そのサイズを入力としたモデルを用意します。
上記URLの出力数というのは使うフィルタの種類の数ということですか?(エッジやぼかし等の)
出力数 = フィルタ数です。どちらの呼び方もされます。
全結合層のノード数の設定はどのようにして行うのでしょうか?
多かったらどうなる少なかったらどうなるのか調べてもピンとこなかったのですいません。
データセットの複雑さに合わせて変えるのがよいのではないでしょうか。
パラメータがデータセットの複雑さに対して、少なすぎると過小適合、多すぎると過学習します。
ハイパーパラメータと考えて良いです。
適当にいじって精度がよい値を採用してみてはどうでしょうか。
投稿2019/01/27 17:51
総合スコア21956
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/27 18:17
2019/01/27 18:26 編集
2019/01/27 18:32
2019/01/27 18:41
2019/01/27 19:17