kaggleというのは機械学習の課題にチャレンジして、どれだけの精度が出せるかを競うコンペです。
今回初心者向けの課題のMNISTにチャレンジしてみた。
MNISTというのは、0か9までの手書きの数字が与えられていて、これをコンピュータに読み取らせてその数字が何かを当てる課題です。
こんなデータが与えられます。
汚い字で、3列目の真ん中なんて5に見えない。人間の目でも6と判定する人がいそう。
訓練用のデータには4万8千枚の手書き数字のサンプルがあり、これを使って数字を読み取るモデルを作ります。
テスト用のデータは1万2千枚。これをどれほど間違いなく当てられるかが課題。
畳み込みニューラルネットワークを使って訓練すると、何とか精度が0.99を超えてきます。間違いは100枚のうち1枚だけ。学校のテストなら99点だ。
0.99も出れば立派なもんですが、順位は1300人中の500番目くらい。上位3分の1にも入れない。
何というレベルの高さ。
ここまではすんなりいくのはここまで。ここからが大変。精度を0.01上げるのに四苦八苦しています。
たとえばオリジナルの訓練データより数字を2~4ピクセル上下左右にずらした画像を作って、訓練データを15万枚以上に水増ししたりしています。今使っているデータは17万枚もある。
データを増やすと訓練にやたらと時間がかかる。だいたい4時間くらいは普通にかかる。GPUを使ってこれだから、GPUが使えないパソコンだと2日くらいかかるかな。
エクセルなんかで、エンターを押すとすぐ答えが出るのに慣れてしまっていると、パソコンが止まったと誤解する。
16回もチャレンジして、今の成績は精度が0.9935で順位が、200番程度。
上には上が200人もいるもんだ。
僕自身、これ以上精度を上げられる気がしない。
ちなみに1位は精度が1.0000。こんなきったない手書き文字を完璧に判定できるモデルを作っています。すごいなぁ。
Comments