MFT2018向けダーツスキル解析(6) - DNNモデル改善⇒収束!
背景
- 前回、データを再度プロットしたり、低次元に圧縮して可視化してみたりしたが、生データのクラスタリングだけでは無理っぽかった。
- DNNモデルを工夫して、再度トライしてみる。
DNNモデル(改善版)
- 前回のモデルに、Batch NormalizationとDropoutを追加してみた。
- これで過学習抑えられて学習速度もあがるだろう、と思う。
- まぁ最適なモデルになった、とはいえないけど、前回よりもかなりマシな構造になったはず。
学習
- とりあえず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
推論テスト
- 一通り、各スコア(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
テスト結果
推論値も良くなった。やっぱりスコア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]