Azarashi Tech Blog

日常における日常的なことやテクノロジー的なこと

MFT2018向けダーツスキル解析(6) - DNNモデル改善⇒収束!

背景

  • 前回、データを再度プロットしたり、低次元に圧縮して可視化してみたりしたが、生データのクラスタリングだけでは無理っぽかった。
  • DNNモデルを工夫して、再度トライしてみる。

DNNモデル(改善版)

  • 前回のモデルに、Batch NormalizationとDropoutを追加してみた。
  • これで過学習抑えられて学習速度もあがるだろう、と思う。
  • まぁ最適なモデルになった、とはいえないけど、前回よりもかなりマシな構造になったはず。

f:id:surumetic-machine-83:20180803194536p:plain

学習

  • とりあえず1万エポック回してみた。Adamでlr=0.0001,beta_1=0.9, beta_2=0.999。
  • 以下のようなロスカーブ。valはそんなに小さくないけど、前回よりはマシ。
  • dropout入れてるからか、すごいグラフが振動している。大丈夫かな?
  • 1万エポック時点では、lossは以下のような感じ。
    • train loss : 0.0007517132
    • validation loss : 0.0585273126

f:id:surumetic-machine-83:20180803194525p:plain

推論テスト

  • 一通り、各スコア(0.0, 0.1, 0.6, 1.0)に対応するデータをもってきて、正しく結果が出てくるか試してみる。

テスト結果

  • スコア1.0のデータ例に対する推論結果 : 

    y_predicted : [0.99993074]

  • スコア0.6のデータ例に対する推論結果:

 y_predicted : [0.5921314]

  • スコア0.1のデータ例に対する推論結果:

    y_predicted : [0.05314487]

  • スコア0.0のデータ例に対する推論テスト結果:

    y_predicted : [0.01145243]

考察

  • それっぽい値が出た!!!!!
  • 1万エポックだけど、まだtrain lossが小さくなりそうなので、学習をもっとまわしてみるとしよう。

まとめ

  • DNNモデルの性能が悪かったのは、モデルの構造が良くなかったからのようです。
  • さて、またダーツ投げまくってデータ増しして性能を向上させますかね!()

追記 2018-08-04

  • 1万epoch学習させましたが、更に追加で9万epoch学習させました。
  • 以下のグラフの通り。やっぱりグラフの変動が大きすぎる気が・・・。train lossの変動の上(?)が最終的な性能くらいだと思っといたほうがいいのか?よくわからないけども。変動の下(?)はこれ以上下がらない雰囲気なので、学習時間は十分のように見える。
  • 最終的な収束値: train loss: 9.0574e-05 - val_loss: 0.0573

f:id:surumetic-machine-83:20180804040558p:plain

テスト結果

  • 推論値も良くなった。やっぱりスコア0.1の推論が少し悪い。僕の問題設定が悪いかも?インブルもブルもscore 0にすればよかったかなぁ。

  • スコア1.0のデータ例に対する推論結果 : 

y_predicted : [0.99999976]

  • スコア0.6のデータ例に対する推論結果:

y_predicted : [0.5994751]

  • スコア0.1のデータ例に対する推論結果:

y_predicted : [0.12352057]

  • スコア0.0のデータ例に対する推論テスト結果:

y_predicted : [2.8647633e-05]