KerasのMNISTサンプル解説

概要

前回記事でインストールした、深層学習用ライブラリKerasでMNISTのサンプルプログラムを動かしました。 今回はサンプルプログラムには何が書かれているのかを見てみます。

前回記事

mashi-prog.hatenablog.com

環境は以下

ホスト

 ・macOS High Sierra 10.13.4
 ・VirtualBox 5.2.1
 ・Vagrant 2.0.4

ゲスト

 ・CentOS7
 ・Anaconda3-5.2.0
 ・Python3.6.5(Anaconda経由でインストール)

機械学習ライブラリ

 ・tensorflow-1.8.0
 ・keras 2.2.0

Kerasのサンプルコードはこちら

github.com

MNISTとは

MNISTは「Mixed National Institute of Standards and Technology」の略のことだそうです。 手書き文字や数字の正解の例が超たくさんあるデータセットのことをさします。
機械学習では非常によく使われるデータセットの1つで、 28*28ピクセルの手書き文字が画像で与えられています。

サンプルコード

ではサンプルコードの実際の順を追いながらみてみます。

使用ライブラリのインポート

import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.optimizers import RMSprop

一番最初にライブラリのインポートを行います。

データの加工

# データを1次元に変形
x_train = x_train.reshape(60000, 784)
x_test = x_test.reshape(10000, 784)
# float型に変換
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
# 数値の範囲を0〜255から0〜1までに
x_train /= 255
x_test /= 255

 MNISTには60000個の画像が、28*28ピクセルで収録されています。2次元で収録されたデータを1次元にするために、変形させています。
 また色情報が0〜255までの数値で収録されており、0が白、255が黒となります。機械学習では0〜1の範囲にいた方が使い勝手がいいため、データ型をfloat型にした上で255で割っています。

テストデータとトレーニングデータ

 機械学習では、データセットをトレーニングデータとテストデータの2つに分割しておきます。 トレーニングデータとはモデルの学習を行い、テストデータで学習の結果を評価します。
 MNISTに関して言えば、60000個のトレーニングデータを使って学習を行い、10000個のテストデータで検証を行うといったイメージです。
 ただ、テストデータは本来、検証データとテストデータで分けるべきであり・・・(この辺のお話はまた今度)

one-hot表現

y_train = keras.utils.to_categorical(y_train, 10)
y_test  = keras.utils.to_categorical(y_test, 10)

 x_train(x_test)に対してy_train(y_test)とは正解のことを表します。
 MNISTは0〜9の手書き文字のことなので、それぞれ0〜9といった数字が正解データとして収録されています。
 最終的に、「この数字が3である確率は86%、8である確率が12%・・・」といった風に出力するので、それぞれの数字がただ格納されているだけでは非常に使いづらいです。
 そこで、「6」であれば「0,0,0,0,0,0,1,0,0,0」といった風にコンピュータが使いやすい形に変換を行います。(OneHot表現と言います)

# load したばかりの時のy_testの一番め
print(y_test[0])
# one-hot表現に
y_test = keras.utils.to_categorical(y_test, num_classes)
# one-hot表現した後のy_testの一番め
print(y_test[0])
7
[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]

こんな感じで出力されます。
ちなみにjupyter notebookを使ってる方は、変数名だけを入力してShift+Enterを押すと中身が見られるので、これなんだっけというときはすぐ確認してみるといいかも。

ここまででデータの加工は終了です。 次回はついに学習モデルに入っていきます。

参考

employment.en-japan.com

Keras で MNIST データの学習を試してみよう