MNIST データセット(Python を使用)
MNIST データセットを紹介する. 利用条件は利用者で確認すること.
【目次】
* MNIST データセット
MNIST データセットは,公開されているデータセット(オープンデータ)である.
0 から 9 までの 10 種類の手書き文字についての, モノクロ画像と,各画像に付いた「0から9までの数値」のラベルから構成されるデータセットである.
- 画像の枚数:合計 70000枚.
(内訳)70000枚の内訳は次の通りである
60000枚:教師データ
10000枚:検証データ
- 画像のサイズ: 28x28 である.
- 画素はグレースケールであり,画素値は0~255である.0が白,255が黒.
【文献】
Y. Lecun, L. Bottou, Y. Bengio and P. Haffner, Gradient-based learning applied to document recognition, vol. 86, no. 11, pp. 2278-2324, 1998.
【サイト内の関連ページ】
- MNIST データセットを扱う Python プログラム: 別ページ で説明している.
- MNIST データセットによる学習と分類(TensorFlow データセット,TensorFlow,Python を使用)(Windows 上,Google Colaboratroy の両方を記載)
【関連する外部ページ】
- MNIST データセット の詳細は, THE MNIST DATABASE of handwritten digits のページで説明されている.その URL は次の通り.
- TensorFlow データセットの MNIST データセット: https://www.tensorflow.org/datasets/catalog/mnist
1. Google Colab へのリンク
Google Colaboratory のページ:
次のリンクをクリックすると,Google Colaboratory のノートブックが開く. そして,Google アカウントでログインすると,Google Colaboratory のノートブック内のコード等を編集したり再実行したりができる.編集した場合でも,他の人に影響が出たりということはない.そして,編集後のものを,各自の Google ドライブ内に保存することもできる.
https://colab.research.google.com/drive/1awZ1ex4KbAJ6hw4VfjKwE-kuiNVVHrfJ?usp=sharing
2. 前準備
Python の準備(Windows,Ubuntu 上)
- Windows での Python 3.10,関連パッケージ,Python 開発環境のインストール(winget を使用しないインストール): 別ページ »で説明
- Ubuntu では,システム Pythonを使うことができる.Python3 開発用ファイル,pip, setuptools のインストール: 別ページ »で説明
【サイト内の関連ページ】
- Python のまとめ: 別ページ »にまとめ
- Google Colaboratory の使い方など: 別ページ »で説明
【関連する外部ページ】 Python の公式ページ: https://www.python.org/
TensorFlow, TensorFlow データセット, Keras, numpy, matplotlib のインストール
Windows の場合
Windows では,コマンドプロンプトを管理者として実行し, 次のコマンドを実行する.
python -m pip install -U tensorflow-gpu tensorflow_datasets keras numpy matplotlib
Windows での TensorFlow のインストールの詳細: 別ページ »で説明
(このページで,Build Tools for Visual Studio 2022,NVIDIA ドライバ, NVIDIA CUDA ツールキット, NVIDIA cuDNNのインストールも説明している.)
Ubuntu の場合
Ubuntu では,次のコマンドを実行.
sudo apt -y update
sudo apt -y install python3-numpy python3-matplotlib
sudo pip3 install -U tensorflow-gpu tensorflow_datasets keras
Ubuntu での TensorFlow のインストールの詳細: 別ページ »で説明
(このページで,NVIDIA ドライバ, NVIDIA CUDA ツールキット, NVIDIA cuDNNのインストールも説明している.)
3. MNIST データセットのロード
【Python の利用】
Python は,次のコマンドで起動できる.
Python 開発環境(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, Spyder, PyCharm, PyScripterなど)も便利である.
Python のまとめ: 別ページ »にまとめ
- Windows で,コマンドプロンプトを実行.
- jupyter qtconsole の起動
これ以降の操作は,jupyter qtconsole で行う.
jupyter qtconsole
Python 開発環境として,Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, spyder のインストール
Windows で,コマンドプロンプトを管理者権限で起動する(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)し,次のコマンドを実行する.
次のコマンドを実行することにより,pipとsetuptoolsを更新する,Jupyter Notebook,PyQt5、Spyderなどの主要なPython環境がインストールされる.
python -m pip install -U pip setuptools requests notebook==6.5.7 jupyterlab jupyter jupyter-console jupytext PyQt5 nteract_on_jupyter spyder
- パッケージのインポート,TensorFlow のバージョン確認など
import tensorflow as tf import numpy as np import tensorflow_datasets as tfds %matplotlib inline import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') # Suppress Matplotlib warnings
- TensorFlow データセット から MNIST データセット をロード
- x_train: サイズ 28 × 28 の 60000枚の濃淡画像
- y_train: 60000枚の濃淡画像それぞれの,種類番号(0 から 9 のどれか)
- x_test: サイズ 28 × 28 の 10000枚の濃淡画像
- y_test: 10000枚の濃淡画像それぞれの,種類番号(0 から 9 のどれか)
結果は,TensorFlow の Tensor である.
type は型,shape はサイズ,np.max と np.mi は最大値と最小値.
tensorflow_datasets の loadで, 「batch_size = -1」を指定して,一括読み込みを行っている.
mnist, mnist_metadata = tfds.load('mnist', with_info = True, shuffle_files=True, as_supervised=True, batch_size = -1) x_train, y_train, x_test, y_test = mnist['train'][0], mnist['train'][1], mnist['test'][0], mnist['test'][1] print(mnist_metadata)
4. MNIST データセットの確認
- データセットの中の画像を表示
MatplotLib を用いて,0 番目の画像を表示する
NUM = 0 plt.figure() plt.imshow(x_train[NUM,:,:,0], cmap='gray') plt.colorbar() plt.gca().grid(False) plt.show()
- データセットの情報を表示
print(mnist_metadata) print(mnist_metadata.features["label"].num_classes) print(mnist_metadata.features["label"].names)
- データの確認表示
MatplotLib を用いて,複数の画像を並べて表示する.
class_names = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] plt.style.use('default') plt.figure(figsize=(10,10)) for i in range(25): plt.subplot(5,5,i+1) plt.xticks([]) plt.yticks([]) plt.grid(False) plt.imshow(x_train[i], cmap=plt.cm.binary) plt.xlabel(class_names[y_train[i]]) plt.show()
- tf.data.Dataset オブジェクトによるデータセットの生成
ロード時に「as_supervised=False」としたときは,「image, label = data['image'], data['label']」
ds_train = mnist['train'] it = ds_train.cache().shuffle(1000).batch(128).prefetch(tf.data.experimental.AUTOTUNE) for data in it.take(1): image, label = data[0], data[1] print(image) print(label)
5. MNIST データセットのデータフレームへの変換
- データセットをデータフレームに変換
train = tfds.as_dataframe(mnist['train'], mnist_metadata) test = tfds.as_dataframe(mnist['test'], mnist_metadata) print(train) print(test)
- データフレームの行列と属性数
行数は len(<データフレーム>), 属性数は len(<データフレーム>.columns)
print(len(train)) print(len(train.columns)) print(len(test)) print(len(test.columns))
- データセットの先頭 10行をデータフレームに変換
train = tfds.as_dataframe(mnist['train'].take(10), mnist_metadata) test = tfds.as_dataframe(mnist['test'].take(10), mnist_metadata) print(train) print(test)
- データフレームの行列と属性数
行数は len(<データフレーム>), 属性数は len(<データフレーム>.columns)
print(len(train)) print(len(train.columns)) print(len(test)) print(len(test.columns))