PythonでMNISTデータセットを取得してmatplotlibで表示させる方法

スポンサーリンク

この記事では、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 Dataset
Mnist Dataset

次は何だ?

MNISTデータセットをインポートしたので、それを使って画像分類を行うことができます。

画像分類のタスクに関しては、CNN(Convolutional Neural Networks)に勝るものはない。

CNNには畳み込み層、プーリング層、平坦化層がある。

それぞれの層が何をするのか見てみましょう。

1. コンボリューション層

コンボリューション層は、画像をより小さなピクセルでフィルタリングします。

これにより、ピクセル間の関係を失うことなく、画像のサイズを減少させることができます。

2. プーリング層

プーリング層の主な仕事は、コンボリューション後の画像の空間サイズを縮小することです。

プーリング層は、ピクセル内の最大値、平均値、または合計値を選択することによって、パラメータの量を減らす。

最大プーリングは最もよく使われるプーリング技術です。

3. 平坦化レイヤ

フラットニングレイヤーは、多次元の画素ベクトルを1次元の画素ベクトルとして表現します。

まとめ

このチュートリアルは MNIST データセットを python にロードすることについてでした。

MNIST Dataset を探索し、MNIST Dataset の画像分類に使用できる CNN ネットワークについて簡単に説明しました。

Pythonでの画像処理についてさらに学びたい場合は、OpenCVを使ってPythonで画像を読み込む方法についてのチュートリアルを読んでみてください。

タイトルとURLをコピーしました