2017年6月29日木曜日

少数のデータで強力な分類能力を有するモデルを作成してみる。 その3 (Building powerful image classification models using very little data. Part3)

kaggle 猫 特に意味はない

はじめに

ボトルネック特徴量を全結合層で分類することで90%の精度が出たが、過学習が発生した。
いくつかのパラメータを変えてみることで、一応値が落ち着いた。

パラメータの変更点

過学習を防ぐために、バッチサイズを16から100に変更した。
また入力画像のサイズを150から160に変更した。
これにより、ボトルネック特徴量は、4x4x512から5x5x512へと拡大した。
このパラメータで実行したところ、下記のようになり、落ち着いたものとなった。

ボトルネック特徴量の学習結果

第3ステップ

第3ステップとして、CNN 層のパラメータも学習するように、転移学習を試してみた。
ソースは、オリジナルのものをコピーしたが、 Keras 2 対応と記載されているが、2ヶ所間違いがある。

75行目
model.add(top_model)
は、エラーとなるので、
model = Model(inputs=base_model.input, outputs=top_model(base_model.output))
に修正する。

また、110行めの
model.fit_generator(
    train_generator,
    samples_per_epoch=nb_train_samples,
    epochs=epochs,
    validation_data=validation_generator,
    nb_val_samples=nb_validation_samples)

の引数は、

samples_per_epoch=nb_train_samples // batch_size
nb_val_samples=nb_validation_samples // batch_size

のようにbatch_sizeで割る必要がある。

注意点

・全結合層の初期値は、第2ステップの結果を使用したほうが精度がよい
・学習率を小さくし、SGD を使用したほうがよい
・ステップ2と同じモデルを採用し、ステップ2の重みを使用しているので、ステップ2を変更した場合、3への影響を確認すること。

結果

グラフを見ると 過学習と思われるので、これも何らかの対策が必要であろうと思われる。

転移学習の結果

0 件のコメント:

コメントを投稿