手書き数字画像の分類編では、
3.1、ニューラルネットワークを用いた深層学習(NN)
3.2、畳み込みニューラルネットワークを用いた深層学習(C-NN)
を扱っていきます。
ニューラルネットワークは、人間の脳を模範したアルゴリズムと言われています。ただ、実際には大幅に単純化されているため、脳の構造とはかなり異なります。
難易度:★★★★☆
ニューラルネットワークを用いて、手書き数字画像の分類器を作成します。また、サンプルデータセットだけでなく、自分の手書き画像も分類器にかけて判別してみます。
① サンプルプログラムにアクセスします。
https://colab.research.google.com/drive/14_sm1HuzcJqg9LsHxFE5dg133FP9_YsJ
② 演習1.2と同様に、自分のGoogleドライブにコピーを保存します。
③ 上から順に「4、テストデータの分類」まで実行していきます。ここまでが、サンプルプログラム通りの数字画像分類です。何も設定を変更しない状況では、約96%の精度をたたき出しているかと思います。
※機械学習では、学習過程において乱数を使用するため、実行の度に若干精度は変化します。
〈演習3.1〉自分の手書き数字画像の分類
④ 続いて、自分の手書き画像の分類を行います。すべてのプログラム>Windowsアクセサリ>ペイントにある「ペイント」というソフトを開きましょう。(お絵描きソフトであれば何でもいいです。)下の画像のようなマークかと思います。
⑤ ペイント画像のサイズを28ピクセル×28ピクセルに変更しましょう。ホーム>サイズ変更より行えます。この際、「縦横比を維持する」のチェックは外してください。
⑥ 続いて、上の画像のように、白地に黒で任意の数字を書きます。
⑦ 名前を付けて保存しましょう。ファイル形式は png 形式が無難かな。
⑦ サンプルプログラムの「5、自分の手書き画像の分類」を実行しましょう。
⑧ アップロードボタンが表示されたら、先ほど保存した自分の手書き画像ファイルをアップロードしてください。
⑨ 次のセルにある「imgfilename」の値を、アップロードしたファイル名に変更します。
imgfilename='アップロードしたファイル名'
としてください。下の例は、アップロードした画像が「3.png」というファイルの場合。
⑩ 最後までセルを実行しましょう。次のような出力がされるはずです。
左に出力されている画像は、読み込んだ画像を表しています。また、[]で囲まれた数字は、上から順に
[[0である可能性] [1である可能性] [2である可能性] [3である可能性] [4である可能性] [5である可能性] [6である可能性] [7である可能性] [8である可能性] [9である可能性]]を表しています。ただ、これは、確率的な値ではありません。値が1に近づくほどその可能性が高いことを表していますが、確率を表しているわけではありませんので、足しても1になるわけではありません。
① サンプルコードにアクセスします。
https://colab.research.google.com/drive/1lYcBzK7S6I_wHpjmFMre1klIXW27YBdc
②下の画像のように、「ドライブにコピーを保存」をクリックします。
③ 各セル(コードの書いてある枠のこと)の左側にある右三角(▶)を上から順にクリックしていきましょう。
C-NNを使うことにより、正答率が若干向上したかと思います。(C-NNだと、97.7%くらい?)
今回はニューラル数や学習率を変更してみてください。学習時間も増えますが、分類精度も上がります。
学習データ数を増やすと、分類精度を上げることができます。画像を少しずつ傾けることで、データ量を増やすことができます。
今回は数字の画像認識を行いましたが、同様の原理でアルファベットやひらがな、動物や車の車種など、ありとあらゆる物が分類できます。
(※文字以外の画像分類は、データの下処理ができていないと、なかなか厳しいけど・・・。)