本日の kaggle / MNIST の進捗 ; 0.99553

本日の成果

kaggle / MNIST の本日のスコアは 0.99553。前回の 0.99532 を微妙に上回り,順位は 上位 9.5% くらいになった。

ポイント

モデル

CNN model for kaggle / MNIST

Tensorflow のチュートリアルスクリプトをベースに,少しずつパラメータを増やしてきた。これ以上増やしても,損失関数やスコアは変わらない感じがしている。

1 層目で (7, 7) と比較的大きなフィルタを使い,大きな領域の特徴をつかむのが良い気がしている。

ImageDataGenerator

Parameters of ImageDataGenerator for kaggle / MNI…

keras.processing.image.ImageDataGenerator を使って,学習時に画像データをランダムに変形させた。過学習を防ぐという意味で,スコアに効いている感じがする。

学習率 (Learning rate) の低減

Callbacks for kaggle / MNIST

keras.callbacks.ReduceLROnPlateau を使い, val_loss が変化しなくなったら学習率を下げるようにした。ただし,学習率が 1e-4 を下回ると変化が無くなるように見えるので,下限を 5e-5 にしている。

アンサンブル学習

スクリプトは無いが,アンサンブル学習の考え方を用いて,5 回,新規にモデルを作って学習し,その結果から予測をした。 「ニューラルネットワークを使ったEnd-to-Endなアンサンブル学習 - Qiita」を参考に,ソフトとハードの両方を試したが,ソフトでスコアが向上した。実は各予測の相関係数は 0.99 を上回っていて,一般的には「効果が無い」条件であったが,それでもわずかに改善できた (たまたま?)。

今後

今のところ,次の一手を見つけられないのと,上位 10% に入れたので,ペンディングにしていた Titanic に戻ろうかと思う。