Keras : 画像分類 : AlexNet
作成 : (株)クラスキャット セールスインフォメーション
日時 : 05/09/2017
AlexNet in Keras
先に Lenet を試したので、AlexNet も簡単に試しておきます。AlexNet の詳細は ImageNet Classification with Deep Convolutional Neural Networks を参照してください。
メモがわりの実装は以下 :
model = Sequential() model.add(Conv2D(48, 11, strides=3, activation='relu', padding='same')) model.add(MaxPooling2D(3, strides=2)) model.add(BatchNormalization()) model.add(Conv2D(128, 5, strides=3, activation='relu', padding='same')) model.add(MaxPooling2D(3, strides=2)) model.add(BatchNormalization()) model.add(Conv2D(192, 3, strides=1, activation='relu', padding='same')) model.add(Conv2D(192, 3, strides=1, activation='relu', padding='same')) model.add(Conv2D(128, 3, strides=1, activation='relu', padding='same')) model.add(MaxPooling2D(3, strides=2)) model.add(BatchNormalization()) model.add(Flatten()) model.add(Dense(2048, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(2048, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(num_classes, activation='softmax'))
モデルの summary() レポートです :
_________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv1 (Conv2D) (None, 75, 75, 48) 17472 _________________________________________________________________ max_pooling2d_1 (MaxPooling2 (None, 37, 37, 48) 0 _________________________________________________________________ batch_normalization_1 (Batch (None, 37, 37, 48) 192 _________________________________________________________________ conv2 (Conv2D) (None, 13, 13, 128) 153728 _________________________________________________________________ max_pooling2d_2 (MaxPooling2 (None, 6, 6, 128) 0 _________________________________________________________________ batch_normalization_2 (Batch (None, 6, 6, 128) 512 _________________________________________________________________ conv3 (Conv2D) (None, 6, 6, 192) 221376 _________________________________________________________________ conv4 (Conv2D) (None, 6, 6, 192) 331968 _________________________________________________________________ conv5 (Conv2D) (None, 6, 6, 128) 221312 _________________________________________________________________ max_pooling2d_3 (MaxPooling2 (None, 2, 2, 128) 0 _________________________________________________________________ batch_normalization_3 (Batch (None, 2, 2, 128) 512 _________________________________________________________________ flatten_1 (Flatten) (None, 512) 0 _________________________________________________________________ dense1 (Dense) (None, 2048) 1050624 _________________________________________________________________ dropout_1 (Dropout) (None, 2048) 0 _________________________________________________________________ dense2 (Dense) (None, 2048) 4196352 _________________________________________________________________ dropout_2 (Dropout) (None, 2048) 0 _________________________________________________________________ dense3 (Dense) (None, 17) 34833 ================================================================= Total params: 6,228,881 Trainable params: 6,228,273 Non-trainable params: 608 _________________________________________________________________
ImageNet : 5 flowers synsets
TensorFlow と一緒に提供されている、ImageNet の5つの flowers synsets – daisy, dandelion, roses, sunflowers, tulips – を題材として訓練してみました。まずは 500 epochs :
更に 300 epochs 再調整 :
University of Oxford: 17 Category Flower Dataset
University of Oxford が提供してくれている、古典的な題材です。データセットの詳細は 17 Category Flower Dataset を参照してください。500 epochs トレーニング :
最後は over-fitting の傾向が見られます。
以上