|
前提知識
・ニューラルネットワークによる画像認識方法①
・pythonの関数
・ホールドアウト法
こちらでニューラルネットワークによる画像認識方法を説明しましたが、そこでは一つの画像データに対して正解を当てるという仕様でした。
それでは、たまたま正解だったのかもしれませんし、今回の仕様がどれほど優れているのか解りません。ここでは画像認識精度を測る方法を説明します。
■考え方
画像認識精度を測るには、テスト用のデータをたくさん用意して正答率を測ります。MNISTのデータを使用し、テストデータは10,000個、訓練用データは60,000個あります。
データの内訳は以下のとおり。

■pythonによるシミュレーション
・pythonバージョン:Ver3.6で確認
・必要ライブラリ:numpy , scipy (インストール方法はこちら)
・必要ファイル:neural3.zip(プログラムファイル) , テストデータ , 訓練データ
正解率の結果は以下となりました。
95.02%
■考察
① 重みの学習前と比較する
上記結果として正解率が95%なら悪くない値だと思いますが、実際に良い結果なのかどうか、重み学習前の値と比較してみます。
重みを学習せずに画像認識させた結果は以下の正解率となりました。これはランダムに数値を推定した場合の正解確率である1/10の確率に近い結果となり、
学習の効果が高いことが分かりました。
11.78%
② 学習率、学習回数を変える
学習率を変えた時の正解率を以下に示します。このように0.1付近が最も高い正解率を示しているのが解ります。
これは学習率が小さいと学習したりなく、学習率が高いと誤差が最小値を飛び越えてしまっていると思われます。

次に学習回数を変えてみます。60,000個のデータを1つの単位として1エポックといい、これを数エポック学習させたときの正解率の結果を以下に示します。
学習率が0.01の方が学習する回数が多く必要ですが、正解率は向上するのが解ります。

③ 不正解の画像の傾向をみる。
最も正解率の高かった、学習率0.01、エポック数40のデータの詳細を見てみます。

0と1が正解率が高く、9が最も正解率が低かったことが分かります。
これは訓練データの偏りに傾向があるのかと思いましたがそうでは無いようです。試しに9の訓練データ数を300増やした時に正解率がどうなるかを調べました。

結果としては、確かに9の正解率は上がりましたが、他の数字の正解率が悪くなりトータルの正解率としても下がってしまいました。
特に4の正解率が悪化しており、4と9の正解率はトレードオフの傾向にあるようです。
他にも訓練データを変えてやってみても正解率が上がるようなことは無く、今回の場合においては訓練データを変えても効果が見込まれないことが分かりました。
④不正解画像は人間の目で見てどうか
不正解の画像は人間の目で見たら判断できるのでしょうか。以下に不正解の画像を何個か載せます。
人間の目で見たら判断できそうな画像が多くあり、人間の画像認識能力の高さに驚きます。
(人間の目で見ても分かりづらいのもありますが)

サブチャンネルあります。⇒ 何かのお役に立てればと
|
|