2章 p.82-87

AI モデルの性能を上げる方法 1

モデルの転移学習

dl_book15_ch02_03a.ipynb で保存した Google Drive 上の train.csv, val.csv を用いて訓練用と検証用のデータをロードする。

[自分へのメモ] 元本の p.84 のコードに bug がある(配布されている ipynb にも)ので注意。以下では、bugを取り除いた実験結果を示す。 コードにbugがあったわけだが、それにしても、実験結果の分析がおかしい部分があるので注意。 bugの詳細については正誤表を参照。

[自分へのメモ(2020/03/20 追記)] github経由で筆者に連絡したところ、訂正されました。現在配布されているipybn ファイルにはこのバグはありません。

モデルの転移学習・ファインチューニング

MobileNetV2

Data Augmentation を使って training する

訓練の accuracy が1.0 で epoch=5 で固定され、これ以上の学習は無意味である。 検証の accuracy は 0.9 なのでまあまあいい感じに学習できているが、少し overfitting 気味な気もする。

さて、MobileNetV2 を含んだモデルを作成したり、fit() する際に次のような警告が出力されている。

WARNING:tensorflow:`input_shape` is undefined or non-square, or `rows` is not in [96, 128, 160, 192, 224]. Weights for input shape (224, 224) will be loaded as the default.

現在は入力画像のサイズが 64x64 だが、これを 96x96 にして実験してみる。

訓練用および検証用の画像を 96x96 に変換して実験してみる。

x_train → x_train96
x_val → x_val96

正解ラベル t_train, t_val は変更の必要は無いので、そのまま使う。

epoch が 6回めで訓練の accuracy が 1.0 に達している。 epoch が2回目で検証の accuracy が 0.96 に達して、そのままその値にはりついている。うまく学習できたといえるのではないだろうか。

この結果から、入力データを学習済みモデルの入力形式に適合させることは重要だといえると思う。