台風コンペ@currypurinのやったこと
初めは、チームみんなで使うコードの整備
test.pyをvalidセットでの自分が指定したリコールでサブミットできるようにする
トレーニング終了時に、欲しいplotや学習結果を出力するようにする
など。
python力がなく、かなり時間がかかってしまう。
knnで、距離を出して分析
TC -> TCやtest->TCなど距離を出してみるものの有効な特徴は得られず
ガウシアンピラミッドを使って32x32にしてやってみるものの、これも効果なし
scikit-learnのknnはl2かつbruteの場合だけ異様に早かった
deepのモデルづくり
ResNet
ResNetにSEモジュール導入
Residualもジュルーの改良
BN及びReLUを畳み込み層の前に(pre-activation )
bn - relu - conv - bn - relu - conv - add
pre-actのresidualモジュール内のReLUの数を1つに
bn - conv - bn - relu - conv - bn - add
Residualモジュールをボトルネックにする
最後の畳み込み層の直前にdropoutを入れる
bn - relu - conv - bn - relu - dropout - conv - add
WideResNet
DenseNet
Random Erasing
結局Se_ResNetの20がスコアが良くて、Se_ResNet50はそれほど良くなかった。
Se_ResNet50のスコアが上がらなかったのはなぜなんだろう。WideResNetとDenseNetは少ししか回せなかったので、後から考えると回すべきだった。
deppのモデルで作りたかったけど、作れたかったもの
スキル不足、時間不足により残念ながらできなかった
PyramidNet
ShakeDrop
など
終盤にどのようにスコアを上げたか(手元評価が約0.50から0.62まで上がった)
Random Erasingを導入して、正則化を強める
学習時のデータをtrain66779x2,valid5,000x2にして、trainを増やした
おそらく少し効いた
それまではtrain50,000x2、valid20,000x2
validを減らしたぶん、評価が安定しなくなりドボンの多発につながった可能性も?
trainのTCのシャッフルをやめた
最初の5000枚をvalidにしたり、最後の5000枚をvalidにしたり
効いたかどうかは不明。
同じ台風がtrainとvalidに別れると嫌なので、いちおうこうしたかった
nonTCはシャッフルしたままにした
2エポックに1度、trainのnonTCを入れ替えてトレーニングするようにした。
nonTCはせっかく2,172,444枚あるのに、使わないのはもったいない
500,000枚x3 と672,333枚*1の4つのpickleにまとめて、2エポックに1度ランダムに選択。そこからtrainに使う66779枚を抽出
これによってscoreは0.05くらい上がった
しかし、サブミットはドボンが増えるようになった。
学習としてこのやりかたは問題があるのだろうか?
ロスをsquared_hingeに変更して、途中から回してみる
singleモデルでscoreが0.61台に到達し、これは効いたかと思うも、アンサンブルしても全く改善されず。
アンサンブルの時に次の特徴を使う
画像毎のmin,max,max-min,var,meanを計算
画像毎に円形に6分割、12分割、23分割、46分割して次を計算
mean,var,max,min,max-min,skew,kutosisを計算
さらにそのmean,var,max,min,max-min,skew,kutosisを計算
これで4x7x7=198の特徴ができる。重複するmax->max,min->min,mean->meanを削除
6分割するイメージ(円の情報となっていない最後の2つは後から考えると不要かも)
https://gyazo.com/f34c7b06200314df1369dabd99b6a8eb
6分割したmax->skewなどがLightGBMのfeature-impotanceの上位となっているなど、少しは台風の特徴をつかめたかも?
max->skewだと、円ごとに最大の明るさ(雲がかかっているか)をだして、それの歪度(中心付近に雲がかかっているか、外側付近に雲がかかっているかをだしているって想定)
lightGBMで、10foldで学習
10回の平均で、リコール0.8の想定で、precision0.6298
最後時間が足りずに10foldでのサブミットが正しくできたかが怪しい。チームメートに申し訳ない。