14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Kerasを使ったCNNモデル(MNIST)

Last updated at Posted at 2018-02-08

Kerasを使ったCNNモデル(MNIST)

初投稿なのでDeepLearningチュートリアルでよくやる、MNISTをCNNで認識するモデルを書きました。Github

開発環境

  • Python 3.6.4
  • Keras 2.1.2
  • tensorflow 1.4.1 (backend)

CPUでも十分学習動きます。

モデル構造

モデルは5層の畳み込みと2層のMaxPoolingとなっています。
特に名前のついたモデルではなくニュアンスで作りました。

model.py
def prepare_simple_CNN_model(input_shape=(28, 28, 1), class_num=10):
    input = Input(input_shape)
    kernel_size = (3, 3)
    max_pool_size = (2, 2)
    
    cnn = Conv2D(64, kernel_size, padding='same', activation='relu')(input)
    cnn = Dropout(0.1)(cnn)
    cnn = Conv2D(64, kernel_size, padding='same', activation='relu')(cnn)
    cnn = Dropout(0.1)(cnn)
    cnn = Conv2D(64, kernel_size, padding='same', activation='relu')(cnn)
    cnn = Dropout(0.1)(cnn)
    cnn = MaxPooling2D(pool_size=max_pool_size, strides=(2, 2))(cnn)
    
    cnn = Conv2D(64, kernel_size, padding='same', activation='relu')(cnn)
    cnn = Dropout(0.1)(cnn)
    cnn = Conv2D(64, kernel_size, padding='same', activation='relu')(cnn)
    cnn = Dropout(0.1)(cnn)
    cnn = Conv2D(64, kernel_size, padding='same', activation='relu')(cnn)
    cnn = MaxPooling2D(pool_size=max_pool_size, strides=(2, 2))(cnn)

    fc = Flatten()(cnn)
    fc = Dense(1024, activation='relu')(fc)
    softmax = Dense(class_num, activation='softmax')(fc)
    model = Model(input=input, output=softmax)
    
    return model

model.pyを実行するとモデルの構造を画像として保存します。

python model.py

学習

train.pyを実行すると学習が始まります。
バッチサイズやエポック数などをオプションで選択できます。
学習のエポックごとに学習したモデルが保存されます。(デフォルトでは'model/'配下)

python train.py

検証

model_path変数に学習済みモデルを指定し、predict.pyを実行すると認識率が表示されます。

predict.py
    model_path = 'model/MNIST_test_epoch_01_model.hdf5'

2エポック学習させると認識率は98.83%となりました。
適当に作った割には少しの学習でそこそこの認識率になりました。
学習時間はCPUで20分くらい。

まとめ

DeepLearningのライブラリには必ず入っているMNISTのチュートリアルコードですが
モデルの保存や学習済みモデルでの検証など最初にやってみたくなることを盛り込んだつもりです。
興味あるモデルを気が向いた時に実装しようと思ってます。
最近はドメイン学習やMulti task学習に興味があるのでMNISTでの自己符号化器とクラス分類を組み合わせたモデルを書こうと思っています。→ 書きました
コードや文章の間違い等ありましたらコメントお願いします。

以下、今回作成したモデル
model.png

14
14
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
14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?