• 海外赴任時の車の売却はJCM

お気に入り一覧 お気に入り登録 お気に入り解除

手書き文字認識の実装をしてみる、その1(MNISTデータセットの説明とダウンロード)【Python、機械学習】

カテゴリ タイ

この記事は、手書き文字を(実際には0から9までの10個の一桁の数字)を機械学習の手法を用いてコンピューターに認識させる方法を解説していく3連の記事の1番目です。
今回は1番目の記事として、今回使用するMNISTデータセットの説明とそのダウンロードの方法をお話しします。
2番目の記事は「手書き文字イメージをコンピュータが理解できる形に変換」、3番目の記事は「MNISTデータセットをもとに学習したアルゴリズムを用いて手書き文字の判別」を説明する予定です。

この手の手書き文字認識は、日本では1960年代に東芝が開発した郵便物の郵便番号の読み取り機が有名です。当時は現在のように機械学習の手法ではなく、それぞれの文字の認識方法を個別にルールを定めて文字の認識を行なっていました。機械学習の手法では、教師あり学習の方法で解答のあるデータセットを与える事により、自動的にアルゴリズムが認識の方法を学習します。
1960年代には国を代表する企業が注力して実現させたものとほぼ同等の機能が、今日では個人用のコンピュータと機械学習の手法により精度の差はあれ、実装できる事に技術の進歩を感じますね。
使用する環境は、MacでPythonをJupyter Notebookを使って動かします。また、Windowsでも問題はないはずです。Pythonのライブラリーは「」を使います。
また教師ありデータのデータセットとしては、前述の通り、有名はMNISTデータセットを使用します。

MNISTデータセットの説明 character_recognize_05character_recognize_05

それではMNISTデータセットのダウンロードですが、その前に少し、このデータセットについて説明させてください。MNISTはModified National Institute of Standrads and Technologyの略でアメリカの商務省傘下のアメリカ国立標準技術研究所という機関(National Institute of Standrads and Technology)が作ったデータセットの"Remix、Modified"版です。

実際には、60000個のトレーニングデータと10000個のテストデータから構成されており、それぞれには28x28ピクセルでそれぞれのピクセルが256段階(0から255)の濃淡を持ったモノクロ文字イメージをデータとして、また、そのイメージが表す文字(0から9までの一桁の数字)をラベルとして持っています。

実際のデータには28x28のサイズのタプルに各要素として0から255までの整数が入っています。

[[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 3 18 18 18 126 136 175 26 166 255 247 127 0 0 0 0]
[ 0 0 0 0 0 0 0 0 30 36 94 154 170 253 253 253 253 253 225 172 253 242 195 64 0 0 0 0]
[ 0 0 0 0 0 0 0 49 238 253 253 253 253 253 253 253 253 251 93 82 82 56 39 0 0 0 0 0]
[ 0 0 0 0 0 0 0 18 219 253 253 253 253 253 198 182 247 241 0 0 0 0 0 0 0 0 0 0]
ーーーーーーーーーー(省略)ーーーーーーーーーー
[ 0 0 0 0 55 172 226 253 253 253 253 244 133 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 136 253 253 253 212 135 132 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]

上記のタプルをイメージ化したのを以下に示します。

character_recoginize_02character_recoginize_02

また、これのラベルは”5”です。
MNISTでは28x28のサイズのタプルをデータとしてまた、1桁の整数(上の例では”5”)をラベルとして一つの要素を形成し、データセット全体としてこれらのデータサンプルを60,000 (トレーニングデータ)+ 10,000 (テストデータ)= 70,000個有しています。以下にこのイメージ図を示します。

character_recoginize_04character_recoginize_04

ここで注意したいのが、SKlearnのデータセットにも同じようなデータセット(Degits datasets:トイデータセット)がありますが、こちらのサイズはかなり小さく、文字のピクセル数は8X8で、データサンプル数も合計1,797個となります。混用しないようにしましょう。

MNISTデータセットのダウンロード character_recognize_06character_recognize_06

それでは、ダウンロードの仕方を説明します。数種類方法はあるのですが、ぼくが知る限りこれから説明する方法が、最も確実で簡単だと思います。

1 : from keras import backend as K
2 : from keras.datasets import mnist
3 : 
4 : (train_data, train_label), (test_data, test_label) = mnist.load_data()

上記のコードではKerasのMNISTデータセットからダウンロードを行なっています。その結果が「train_data」、「train_label」、「test_data」、「test_label」のそれぞれの変数に代入されています。

MNISTデータセットのセーブとロード character_recognize_07character_recognize_07

それでは最後にダウンロードしたデータセットを再度使用するために、セーブ・ロードする方法を説明します。

1 : from sklearn import externals
2 :
3 : externals.joblib.dump(train_data, "TRAIN_DATA")
4 : externals.joblib.dump(train_label, "TRAIN_LABEL")
5 : externals.joblib.dump(test_data, "TEST_DATA")
6 : externals.joblib.dump(test_label, "TEST_LABEL")

上記のコードでダウンロードしたMNISTデータセットをデータの種類ごとにセーブします。

1 : from sklearn import externals
2 : 
3 : train_data_1 = externals.joblib.load("TRAIN_DATA")
4 : train_label_1 = externals.joblib.load("TRAIN_LABEL")
5 : test_data_1 = externals.joblib.load("TEST_DATA")
6 : test_label_1 = externals.joblib.load("TEST_LABEL")

続いて、上記のコードでセーブしたデータをロード(読み込み)することができます。また、カレントデレクトりーに大文字のファイル(TRAIN_DATAなど合計4つ)が作成されているはずなので、念の為確認してみてください。

最後に

今回は機械学習による文字認識実装のための第一弾として、MNISTデータセットの解説・ダウンロード・セーブおよびロードの方法を解説してきました。今後は第2弾として、手書き文字のイメージをMNISTのデータと同じように28x28のタプルの変換する方法を説明する記事。第3弾としてそれらをもとに手書き文字を認識するアルゴリズムを実装する方法を説明する記事を更新していきます。
それでは最後まで、お付き合いありがとうございました。さようなら。

続きを読む

ブログ紹介

みゆきメダカのブログ

https://miyukimedaka.com

20年以上の東南アジアでの海外赴任の経験をもとに、これから海外赴任される方、されている方との有益な情報の共有できればと思っています。

カテゴリ タイ

このブログの最新記事

これで漏れ無し!海外赴任前の準備方法

チャートとチェックリストを使って、
海外赴任前の準備項目を確認しながら情報を収集して準備に備えましょう!

海外赴任準備チェックリストを確認する

書籍版のご案内

海外赴任ガイド 到着から帰国まで

書籍版「海外赴任ガイド」は各種ノウハウや一目で分かりやすい「海外赴任準備チャート」などをコンパクトな一冊にまとめております。海外赴任への不安解消に繋がる道しるべとしてご活用ください。

書籍版の詳細

プログライターの方

海外赴任ブログを登録する

あなたのブログを登録してみましょう!

プログライターの方

海外赴任ガイドのSNS

Twitter アカウントをみる

たいせつにしますプライバシー 10520045