はじめまして。アイティーシー ソリューション事業部に所属しております、東村と申します。
今回の記事では、私が取り組んだコンペについてお話しできればと思います。
今回取り組んだコンペ
コンペ内容
手書きの0~9の数字をモデルに当てさせて正答率を競うコンペです。データを見てみるとこんな感じです。
作成したモデル
データの一つひとつは784の数字の羅列ですが、28×28の画像データとして扱うことができます。今回は画像データとして扱い、畳み込み層を用いたモデルを作成します。
作ったモデルは、 畳み込み→畳み込み→全結合 というシンプルなものです。畳み込み層は一つだと心もとないかな…と思ったので二つ入れました。バッチサイズは適当に32とし、最適化関数はSGDを使ってみます。
作成したコードはこちら
結果
スコアは0.97946でした。つまり、未知のデータのうち97.9%はうまく当てられたみたいです。結構良いのではないでしょうか。
スコア向上
97.9%は低くないとは言え、コンペ上位の方々は軒並み98~99%超えです。なので、ひとまずは98%超えを目指したいと思います。
すぐに思いつく中で実装が簡単なのが、最適化関数をSGDからAdamにすることです。個人的に分かりやすい最適化関数がSGDなのでこれを使いましたが、計算に時間がかかる上に今は改良された最適化関数がたくさん出ています。いたるところで用いられていると噂のAdam、計算も早く安定して精度が出るらしいのでこちらを使ってみます。
(参考:https://qiita.com/omiita/items/1735c1d048fe5f611f80)
結果
スコアは0.98875に伸びました。ただし学習曲線をみてみると、少し訓練データに適応しすぎな気もします。
最後に
他にも少し学習回数や学習率をいじってみましたが、あまり精度は伸びませんでした。他に思いつくことは、
・回転・拡大縮小だけでデータ拡張
・モデルの見直し
などでしょうか。今の自己ベストが98.8%なので、次はこれらを試してスコア99%超えを目指したいと思います。
最後まで読んでいただき、ありがとうございました。次回の記事もどうぞよろしくお願いいたします。