2017年6月25日日曜日

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

kaggle cat  特に意味はない

はじめに

表題のとおり、少ないデータで識別能力の高いモデルを作成してみる。オリジナルは、この記事。それと、オリジナルを参考にした "VGG16のFine-tuningによる犬猫認識" の記事を TensorFlow 1.2 + keras 2.0.5 上で再現を試みる

今回は、第2段としてBottleneck 特徴量を使用した分類を試してみた。

Bottleneck 特徴量は、VGG16のモデルを使用し作成するが、最終段の1000クラス分類用の全結合層は使用しない。代わって新たに、2クラス分類用に結合層を定義し直し、この部分のみ学習させることとなる。

新たに定義された全結合層

プログラムの構成

プログラムは2つのパートに分けられ、1つは、VGG16を使用し、ボトルネック特徴量を作成する部分である。抽出された特徴量は、ファイル名 bottleneck_features_train.npy で一旦保存される

また、検証用データの特徴量も合わせて計算され、ファイル名bottleneck_features_validation.npy で同様に保存される

もう一つは、定義した全結合層を、最初に作成したボトルネック特徴量のファイルを入力として学習する部分である。モデルの重みデータは、bottleneck_fc_model.h5 として保存される。

結果

プログラムは、オリジナルのプログラムを若干修正したもので試している。
今回学習は数分で終了した。検証用データの正答率は、89.7%であった。

学習結果  

課題

オリジナルでは、特徴量を作成するジェネレータで指定するデータ量を、バッチサイズ(16)で割っていたが、
 bottleneck_features_train = model.predict_generator(generator, nb_train_samples // batch_size)

aidiary さんのサンプルでは、学習用データサイズそのままを指定している
 bottleneck_features_train = model.predict_generator(generator, nb_train_samples)

これのどちらが正しいのか判断できないので、修行が必要である。

0 件のコメント:

コメントを投稿