人工知能と競プロやってくブログ

深層学習・機械学習・AI・atcoder・競技プログラミングについて調べてやってみたことをまとめるブログです

畳み込みニューラルネットワークでのFashion-MNISTの学習をひたすら廻してみた結果

f:id:uchidamax:20180129020710p:plain
前回の記事
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リポジトリ

github.com

こちら。
今回、学習してできたモデルのバイナリも入ってます。

Googleスプレッドシート

学習グラフの数値の元データが入っているGoogleスプレッドシートがコチラ。
drive.google.com

drive.google.com

参考

stackoverflow.com KerasのトレーニングログをCSV形式で保存するやり方が書いてあるよ。