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への影響を確認すること。
結果
グラフを見ると 過学習と思われるので、これも何らかの対策が必要であろうと思われる。転移学習の結果 |