アラカン"BOKU"のITな日常

文系システムエンジニアの”BOKU”が勉強したこと、経験したこと、日々思うこと。

ディープラーニング+MINISTデータで数値認識結果を詳しく見てみる

手作りディープラーニング実装で手書き数字画像データ(MNIST)を使って手書き数字認識テストをやった結果を、掘り下げてみます。

 

MNISTデータの内容についての詳しい情報って、意外と見つからないのです。

 

テストをする時に、どのように構成されたデータなのかも調べながらやらざるをえなかったので、そのあたりを少し詳しく書いてみようということです。

 

利用したのは、"BOKU"が、ディープラーニングフルスクラッチでゼロから実装したものです。なので、一般に公開されているディープラーニングフレームワークとかを使った結果とは、多少異なるかもしれませんので、ご了承ください。

 

MNISTデータ

MNISTは、こんな感じの手書き数字画像を、学習用に60000枚、テスト用に10000枚も用意してくれている有名なデータです。

f:id:arakan_no_boku:20161112112600j:plain

 

画像サイズは、28✖28です。これをpythonで処理する時には、784バイトの行列データに変換して行います。

 

例えば、上記の手書き数字だとこうなります。

f:id:arakan_no_boku:20161112112946j:plain

 

0は黒背景部分です。以外の数字は色を表していると考えればいいんですが、画像だと、単調な白一色に見えますが、意外と強弱があることがわかります。

 

これのテスト用データを使って、おもちゃディープラーニングの学習済パラメータを使って、やってみます。正解率97.03%の学習済パラメータによる結果内訳です。

f:id:arakan_no_boku:20161112170924j:plain

 

0,1あたりの正解率が高いのは、形が単純だから、まあわかりますね。

3と5とかが間違いやすいんじゃないかと思っていたのですが、予想に反して、一番誤認識が多かったのは、9でした。

 

不思議だったので、間違った画像データをピックアップしてみます。

正解が9なのに間違えて、他の数字と認識した画像

f:id:arakan_no_boku:20161112171501j:plain

うーん。なるほど。

 

1902.jpg を4 と間違えたり、6506.jpgを0と間違えるのは、いかにもって感じです。

 

あと、9643.jpgや6572.jpgを7ってのもわかるな。

 

でも、98%とか99%を目指すには、この中の過半はちゃんと9と判断しないといけないわけです。思っていたより難しいですね。

 

多分人間がやっても100%は無理でしょう。

 

本格的なディープラーニング処理系だと、画像認識精度向上のために、さらに様々な技術が使われてますが、この1%、2%の精度向上のためなんだなと思うと、なんか、納得しました。