畳み込みニューラルネットワークでのFashion-MNISTの学習をひたすら廻してみた結果
前回の記事
Fashion-MNISTを畳み込みニューラルネットワークで判定する簡単サンプル - 人工知能プログラミングやってくブログ
に対して
「val_lossがまだ0.2もあるんだから、もっと学習回せば正答率あがんじゃないの?」
という意見をもらったんで、
「じゃ、試しにやってみるか」
と徹底的に学習を回してみました。
その結果を発表します。
学習コード
kerasのexampleに入ってるmnist_cnn.pyをベースにちょっと書き換えたもの。
次のような変更がされている。
- MNISTではなくてFashion-MNISTのデータから学習する(当然)
- 引数で学習回数(epochs)を指定できるようにした
- 学習ログをcsvで出力する
学習回数 12エポック
前回の記事で「コスパ的にこの学習回数がベストっぽい」という結論に一回なった12エポックの学習グラフ。
val_accの最大値は、0.9236。
学習回数 24エポック
val_accの最大値は、0.9325。 val_lossも上がってないし、成績的にはこっちの方がちょっと良くなってるから、これも良い。
学習回数 64エポック
すでにval_lossが上がってきてて過学習の傾向が見られる。
val_accの最大値は、0.9371。
学習回数 128エポック
まぁval_loss上がっちゃってますね。
val_accの最大値は、0.9343。
学習回数 256エポック
val_accの最大値は、0.9383。
学習回数 512エポック
val_accの最大値は、0.9381。
学習回数 1024エポック
val_accの最大値は、0.9378。
学習回数 2048エポック
val_accの最大値は、0.9364。
val_lossは0.6近くまで上がってきてて、激しく過学習気味。
学習回数に関する総評
結果から考えるに、このニューラルネットワークの構造でFashion-MNISTを学習したとき、93%くらいの正答率しか出ないということだろう。
データとニューラルネット構造の兼ね合いで、だいたい出るであろう最大の成績は決まっていて、割と早い段階でその数値には達してしまうと考えて良いのだろうと思う。
そして、その段階に到達してしまった後はマシンパワーを使って学習を回してもval_lossが上がって過学習になってしまい、電力の無駄遣いにしかならないということのようだ。
例外もあるかもしれないけど、今回の実験結果からは、そのように考えられる。
GitHubリポジトリ
こちら。
今回、学習してできたモデルのバイナリも入ってます。
Googleスプレッドシート
学習グラフの数値の元データが入っているGoogleスプレッドシートがコチラ。
drive.google.com
参考
stackoverflow.com KerasのトレーニングログをCSV形式で保存するやり方が書いてあるよ。