Web Application: 第7回 VGG16を使った転移学習

Keita_Nakamoriです。TensorFlowに疲れてきました。

早くwebアプリの部分にいきたい・・・。

今回は、転移学習を試してみます。学習済みのCNNであるVGG16を使って、その後ろに中間層と全結合層をマニュアルで挿入して最終的にsoftmax関数を通して結果を出力します。

中間層は256node、全結合層は2クラスしかないので2nodeです。

スクリプト:VGG16_trans.py

前回まで、import keras をして kerasを使用していましたが、今どきはTensorFlowのクラスとして存在しているので使ってみます。

というのもfrom keras.models import Modelでエラーが出てしまいどうしようもないので調べていたら見つけました。

構造

スクリプト内の# モデルのサマリーを確認する model.summary() までを実行するとニューラルネットワークの構造が確認できます。

最後に、sequential (Sequential) (None, 2) が新しく生成されました。

結果

VGG16層 全結合2層 17エポックまでやってみましたが、数十分かかってしまいました。流石のディープさです。

しかし、結果は素晴らしいい。トレーニング100% テスト99%の精度。

そして、モデルファイルである192MB のvgg16_trans.h5 ファイルも上手く生成できていました。

スクリプト:vgg16_predict.py

では、転移学習済みのvgg16_trans.h5モデルをロードして、Anacondaプロンプトからサンプル画像を入力することによってcar なのか motorbikeなのか予測してみましょう。

予測

1.車の画像データの一つをcar1.jpgにリネームしてdjangoaiフォルダ直下に移動します。

(djangoai) C:\Users\keita\anaconda_projects\djangoai>python vgg16_predict.py car1.jpg

結果:car 100

2.次にバイクの画像データの一つをbike1.jpgにリネームしてdjangoaiフォルダ直下に移動します。

(djangoai) C:\Users\keita\anaconda_projects\djangoai>python vgg16_predict.py motorbike1.jpg

結果:motorbike 100

3.試しにビキニ画像データを入力してみましたが・・・バイク100%になりました。(笑)

次回

Web Application: 第8回 はじめてのwebアプリ