本日の成果
kaggle / MNIST の本日のスコアは 0.99553。前回の 0.99532 を微妙に上回り,順位は 上位 9.5% くらいになった。
ポイント
モデル
Tensorflow のチュートリアル のスクリプトをベースに,少しずつパラメータを増やしてきた。これ以上増やしても,損失関数やスコアは変わらない感じがしている。
1 層目で (7, 7)
と比較的大きなフィルタを使い,大きな領域の特徴をつかむのが良い気がしている。
ImageDataGenerator
Parameters of ImageDataGenerator for kaggle / MNI…
keras.processing.image.ImageDataGenerator
を使って,学習時に画像データをランダムに変形させた。過学習を防ぐという意味で,スコアに効いている感じがする。
学習率 (Learning rate) の低減
keras.callbacks.ReduceLROnPlateau
を使い, val_loss
が変化しなくなったら学習率を下げるようにした。ただし,学習率が 1e-4 を下回ると変化が無くなるように見えるので,下限を 5e-5 にしている。
アンサンブル学習
スクリプトは無いが,アンサンブル学習の考え方を用いて,5 回,新規にモデルを作って学習し,その結果から予測をした。 「ニューラルネットワークを使ったEnd-to-Endなアンサンブル学習 - Qiita」を参考に,ソフトとハードの両方を試したが,ソフトでスコアが向上した。実は各予測の相関係数は 0.99 を上回っていて,一般的には「効果が無い」条件であったが,それでもわずかに改善できた (たまたま?)。
今後
今のところ,次の一手を見つけられないのと,上位 10% に入れたので,ペンディングにしていた Titanic に戻ろうかと思う。