ゼロから始める機械学習

機械学習についての個人メモ

Kaggle 画像分類、時間短縮と精度向上のメモ

Kaggle Planetに参加しました。結果は96位。
Discussionにない工夫をした点は天候に応じて特定のラベルの閾値を変更する程度で、 提出したのはVGG16, ResNet50, Xceptionの3CNNのアンサンブルでした。

f:id:fujisanx:20170727102609p:plain

時間短縮の為に

精度を競うと機械学習は実験的な側面もあり、いくらでも時間を溶かせます。
Kaggleのランキング上位のインタビューを見てもデータの特徴をうまく掴むことが大事だと思います。

  • ローカルでの検証環境を整える
  • データの整形・拡張の比較検証は軽量なCNNで
  • 時間のかかるCNNモデルは最後、その他の処理に注力する
  • 条件によってある程度決めれるパラメーターは固定してしまう
  • 学習は夜間や他のことをやってる時に
  • Discussionや過去の勝者ソリューションを見る

精度向上の為に

  • TTA 推論時のデータ拡張
  • アンサンブル 平均、投票など

コードを再利用しやすく

以下の構成に落ち着きました。

  • preprocess データのリサイズやクリーニングをしてnpzで保存
  • explore   データの調査
  • train    学習、1コードで学習からFスコアの結果を見れるように
  • predict   推論、アンサンブル用にnpzで保管

学習や推論は何度も実行するのでパラメーターを渡すのみにしました。

run_train(CNNname, freeze_layer, optimizer='Adam', fold_num=5, validation_no=1, dataset=npz_name)

jupyter notebookを使用していますが、結果も1ファイルに残り楽です。
コードに変更を行う場合は複製してコードを残し、アンサンブル用にタイムスタンプを付けたweightsとnpzを生成します。

github.com

結果

メダルを2枚取得でき無事Kaggle expertになりました。
Kaggleへの参加は実データに向き合う練習になり、KernelやDiscussionを読むのも非常に勉強になります。
Kaggle masterへの道は遠い。

画像認識で参考にした書籍

深層学習

bookclub.kodansha.co.jp

画像認識

www.kspub.co.jp