この記事では、PythonでMNISTデータセットをロードするステップを説明します。
MNISTデータセットは、手書き数字の大規模なデータベースです。
様々な画像処理システムの学習によく利用されています。
MNISTはModified National Institute of Standards and Technologyのデータベースの略です。
このデータセットは、手書きの数字を認識するモデルの学習に使われます。
文字に書かれた手書きのピンコードのスキャンに応用されています。
MNISTには、0から9までの手書き数字の画像7万枚、28×28のコレクションが含まれている。
なぜMNISTデータセットはそんなに人気があるのか?
MNISTが人気なのは、様々な理由があります。
- MNSITデータセットは一般に公開されている。
- 使用する前にほとんど処理する必要がない。
- 膨大な量のデータセットです。
さらに、このデータセットは画像処理や機械学習のコースでよく使用されます。
PythonでMNISTデータセットを読み込む
この記事では、MNISTデータセットについて学びます。
また、PythonでMNISTデータセットをロードする方法についても見ていきます。
1. Pythonでデータセットを読み込む
まずはデータセットをPythonノートブックにロードすることから始めましょう。
データをロードする最も簡単な方法は、Kerasを使用することです。
from keras.datasets import mnist
|
MNISTデータセットは、トレーニングデータとテストデータから構成されています。
各画像は28X28で保存され、対応する出力は画像内の数字です。
トレーニングデータとテストデータの形状を見ることで、これを確認することができます。
データを変数に読み込むには以下を使用します。
(train_X, train_y), (test_X, test_y) = mnist.load_data()
|
学習用とテスト用のベクトルの形状を表示するには、:
print ( 'X_train: ' + str (train_X.shape))
print ( 'Y_train: ' + str (train_y.shape))
print ( 'X_test: ' + str (test_X.shape))
print ( 'Y_test: ' + str (test_y.shape))
|
次のような出力が得られます。
X_train: ( 60000 , 28 , 28 )
Y_train: ( 60000 ,)
X_test: ( 10000 , 28 , 28 )
Y_test: ( 10000 ,)
|
この結果から、MNISTデータセットについて以下のように結論付けることができます。
- トレーニングセットには6万枚の画像、テストセットには1万枚の画像が含まれる。
- 学習入力ベクトルは[60000 X 28 X 28]の次元です。
- 訓練出力ベクトルは[60000 X 1]の次元です。
- 個々の入力ベクトルは[28 X 28]の次元です。
- 個々の出力ベクトルは[1]次元です。
2. MNIST データセットのプロット
MNIST データセットの画像を表示してみましょう。
まず、matplotlib をインポートします。
from matplotlib import pyplot
|
データをプロットするには、以下のコードを使用します。
from matplotlib import pyplot
for i in range ( 9 ):
pyplot.subplot( 330 + 1 + i)
pyplot.imshow(train_X[i], cmap = pyplot.get_cmap( 'gray' ))
pyplot.show() |
出力は次のようになります。
from keras.datasets import mnist
from matplotlib import pyplot
#loading (train_X, train_y), (test_X, test_y) = mnist.load_data()
#shape of dataset print ( 'X_train: ' + str (train_X.shape))
print ( 'Y_train: ' + str (train_y.shape))
print ( 'X_test: ' + str (test_X.shape))
print ( 'Y_test: ' + str (test_y.shape))
#plotting from matplotlib import pyplot
for i in range ( 9 ):
pyplot.subplot( 330 + 1 + i)
pyplot.imshow(train_X[i], cmap = pyplot.get_cmap( 'gray' ))
pyplot.show() |
Python で MNIST データセットをロードしてプロットする完全なコード
このチュートリアルの完全なコードは以下の通りです。
次は何だ?
MNISTデータセットをインポートしたので、それを使って画像分類を行うことができます。
画像分類のタスクに関しては、CNN(Convolutional Neural Networks)に勝るものはない。
CNNには畳み込み層、プーリング層、平坦化層がある。
それぞれの層が何をするのか見てみましょう。
1. コンボリューション層
コンボリューション層は、画像をより小さなピクセルでフィルタリングします。
これにより、ピクセル間の関係を失うことなく、画像のサイズを減少させることができます。
2. プーリング層
プーリング層の主な仕事は、コンボリューション後の画像の空間サイズを縮小することです。
プーリング層は、ピクセル内の最大値、平均値、または合計値を選択することによって、パラメータの量を減らす。
最大プーリングは最もよく使われるプーリング技術です。
3. 平坦化レイヤ
フラットニングレイヤーは、多次元の画素ベクトルを1次元の画素ベクトルとして表現します。
まとめ
このチュートリアルは MNIST データセットを python にロードすることについてでした。
MNIST Dataset を探索し、MNIST Dataset の画像分類に使用できる CNN ネットワークについて簡単に説明しました。
Pythonでの画像処理についてさらに学びたい場合は、OpenCVを使ってPythonで画像を読み込む方法についてのチュートリアルを読んでみてください。