後日追記
>この記事は昔以下の記事を書く前のものです。
>なので、よくわかっていないところが多々あるかもしれません。
>先にお詫びしておきます。
--- 以後本文 ---
手作りディープラーニング実装で手書き数字画像データ(MNIST)を使って手書き数字認識テストをやった結果を、掘り下げてみます。
MNISTデータの内容についての詳しい情報って、意外と見つからないのです。
テストをする時に、どのように構成されたデータなのかも調べながらやらざるをえなかったので、そのあたりを少し詳しく書いてみようということです。
利用したのは、"BOKU"が、ディープラーニングをフルスクラッチでゼロから実装したものです。なので、一般に公開されているディープラーニングのフレームワークとかを使った結果とは、多少異なるかもしれませんので、ご了承ください。
MNISTデータ
MNISTは、こんな感じの手書き数字画像を、学習用に60000枚、テスト用に10000枚も用意してくれている有名なデータです。
画像サイズは、28✖28です。これをpythonで処理する時には、784バイトの行列データに変換して行います。
例えば、上記の手書き数字だとこうなります。
0は黒背景部分です。以外の数字は色を表していると考えればいいんですが、画像だと、単調な白一色に見えますが、意外と強弱があることがわかります。
これのテスト用データを使って、おもちゃディープラーニングの学習済パラメータを使って、やってみます。正解率97.03%の学習済パラメータによる結果内訳です。
0,1あたりの正解率が高いのは、形が単純だから、まあわかりますね。
3と5とかが間違いやすいんじゃないかと思っていたのですが、予想に反して、一番誤認識が多かったのは、9でした。
不思議だったので、間違った画像データをピックアップしてみます。
<正解が9なのに間違えて、他の数字と認識した画像>
うーん。なるほど。
1902.jpg を4 と間違えたり、6506.jpgを0と間違えるのは、いかにもって感じです。
あと、9643.jpgや6572.jpgを7ってのもわかるな。
でも、98%とか99%を目指すには、この中の過半はちゃんと9と判断しないといけないわけです。思っていたより難しいですね。
多分人間がやっても100%は無理でしょう。
本格的なディープラーニング処理系だと、画像認識精度向上のために、さらに様々な技術が使われてますが、この1%、2%の精度向上のためなんだなと思うと、なんか、納得しました。