機械学習の例として、手書き数字の判定をさせることがある。サンプルデータとしては、MNISTがよく使われる。Kerasのサンプルデータセットにも、MNISTが含まれている。
今回は、そのデータ構造を確認する。
MNIST Dataset¶
In [1]:
from keras.datasets import mnist
import matplotlib.pyplot as plt
%matplotlib inline
import math
MNISTのデータを読み込む。
In [2]:
(X_train, y_train), (X_test, y_test) = mnist.load_data()
In [3]:
X_train.shape
Out[3]:
In [4]:
y_train.shape
Out[4]:
In [5]:
X_test.shape
Out[5]:
In [6]:
y_test.shape
Out[6]:
60,000個のトレーニングデータ(X_train, y_train)と、10,000個のテストデータ(X_test, y_test)で構成されている。
X_train, X_testの要素は、28×28の2次元配列だ。これは、28×28ピクセルの画像と対応している。
つまり、2次元配列の要素は[0..255]の整数値で、グレイスケール画像の1画素の濃淡の階調を表現している。8ビットで表現しており、0が黒、255(=2^8-1)が白だ。
一方、y_train, y_testには、画像に対応した[0..9]のラベルが格納されている。
試しに、X_trainの最初の要素を取り出す。
In [7]:
some_digit = X_train[0]
some_digit.shape
Out[7]:
画素の並び順と一致するように、この2次元配列の数値をprintする。ただし、視覚的に分かりやすいように、値が正であれば全て1に変換しておく。
In [8]:
digit_binary = [[math.ceil(eight_bit_int / 255) for eight_bit_int in row] for row in some_digit]
for row in digit_binary:
print(row)
なんとなく"5"であることが分かる。
In [9]:
some_digit_label = y_train[0]
some_digit_label
Out[9]:
ラベルを確認すると、実際に"5"だ。
確認のため、X_trainの最初の15個を画像で表示し、対応するy_trainの値をタイトル(画像上)につけておく。
In [10]:
for i in range(15):
plt.subplot(3, 5, i + 1)
plt.axis('off')
plt.title(y_train[i])
plt.imshow(X_train[i], cmap='gray')
plt.show()
黒背景に白文字で書かれていることが分かる。
ソースコード