MNIST データセットをダウンロードし,CSV ファイルに変換(Python,Windows 上)
【概要】
手書き数字画像の標準データセットである MNIST データセットを,Windows 上の Python で取得し,CSV ファイル形式に変換する手順を示す。CSV は表計算ソフトや多くのプログラミング言語から読み込みやすく,扱いやすい形式である。ここでは Keras(ディープラーニング用ライブラリ)が提供する取得機能を使い,画像とラベルを CSV に書き出す。生成される CSV は,学習用画像,学習用ラベル,テスト用画像,テスト用ラベルの 4 つである。
【目次】
- 第1章 MNIST データセットの概要
- 第2章 事前準備(Python パッケージのインストール)
- 第3章 ダウンロードと CSV 変換の手順
- 第4章 使用するプログラムのソースコード
- 第5章 生成された CSV ファイルの確認
【関連する外部ページ】
- MNIST データセットの公式ページ:http://yann.lecun.com/exdb/mnist/
- Keras の MNIST 読み込み機能の公式ドキュメント:https://keras.io/api/datasets/mnist/
【サイト内の関連情報】
第1章 MNIST データセットの概要
MNIST は,0 から 9 までの手書き数字を 28×28 画素の濃淡画像で集めたデータセットである。学習用に 60,000 枚,テスト用に 10,000 枚の画像があり,各画像には正解の数字(ラベル)が付いている。各画素は 0 から 255 の値(0 が背景,255 が前景)をとる。
MNIST は NIST(米国国立標準技術研究所)の Special Database 3(SD-3)と Special Database 1(SD-1)から作られている。MNIST の Web ページ(http://yann.lecun.com/exdb/mnist/)には,データセットの作り方や利用方法が説明されている。この Web ページの一部を引用する。
"The MNIST training set is composed of 30,000 patterns from SD-3 and 30,000 patterns from SD-1. Our test set was composed of 5,000 patterns from SD-3 and 5,000 patterns from SD-1. The 60,000 pattern training set contained examples from approximately 250 writers."
(訳:MNIST の学習用セットは SD-3 由来の 30,000 件と SD-1 由来の 30,000 件からなる。テスト用セットは SD-3 由来の 5,000 件と SD-1 由来の 5,000 件からなる。60,000 件の学習用セットには,およそ 250 人の書き手による例が含まれている。)
第2章 事前準備(Python パッケージのインストール)
本手順は Windows 上の Python で行う。MNIST の取得とデータ整形,CSV 書き出しのために,Keras(データセット取得に使用),NumPy(数値配列を扱うライブラリ),pandas(表形式データを扱うライブラリ)を使う。
管理者権限でコマンドプロンプトを起動する
(手順:Windowsキーまたはスタートメニュー → cmd と入力 → 右クリック → 「管理者として実行」)。
起動したコマンドプロンプトで,次のコマンドを実行してパッケージをインストールする。
pip install -U --no-user numpy pandas keras tensorflow
ここで tensorflow も入れているのは,Keras の MNIST 取得機能が内部でデータ配列を扱う際に,標準的な実行環境として TensorFlow(Keras の基盤として広く使われる数値計算ライブラリ)を利用できるためである。
第3章 ダウンロードと CSV 変換の手順
- プログラムを用意する
第4章のソースコードを,ファイル名
mnist_to_csv.pyとして保存する。CSV を出力したいフォルダ(作業フォルダ)に置く。 - プログラムを実行する
管理者権限でコマンドプロンプトを起動する (手順:Windowsキーまたはスタートメニュー →
cmdと入力 → 右クリック → 「管理者として実行」)。mnist_to_csv.pyを置いたフォルダへcdコマンドで移動し,次を実行する。初回実行時に,Keras が MNIST のデータ(npz 形式のファイル)を自動でダウンロードする。python mnist_to_csv.py
- 生成された CSV ファイルを確認する
実行が終わると,作業フォルダに次の 4 つの CSV ファイルができる。
- mnist_train_images.csv(学習用画像。1 行が 1 枚の画像で,id 列と 784 個の画素値の列をもつ)
- mnist_train_labels.csv(学習用ラベル。id 列と label 列をもつ)
- mnist_test_images.csv(テスト用画像。1 行が 1 枚の画像で,id 列と 784 個の画素値の列をもつ)
- mnist_test_labels.csv(テスト用ラベル。id 列と label 列をもつ)
- ファイルの中身を確認する
CSV ファイルを表計算ソフトやテキストエディタで開き,先頭行の見出しと,データが書き出されていることを確認する。
第4章 使用するプログラムのソースコード
次のプログラムは,Keras を使って MNIST を取得し,画像を 28×28 から 784 列に並べ替えたうえで,画像とラベルをそれぞれ CSV に書き出す。画像 1 枚を CSV の 1 行とし,先頭に通し番号(id)の列を付けている。
import numpy as np
import pandas as pd
from keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(x_train.shape[0], 28 * 28)
x_test = x_test.reshape(x_test.shape[0], 28 * 28)
train_images = pd.DataFrame(x_train)
train_images.insert(0, "id", np.arange(1, x_train.shape[0] + 1))
train_images.to_csv("mnist_train_images.csv", index=False)
print("created mnist_train_images.csv")
train_labels = pd.DataFrame({"id": np.arange(1, y_train.shape[0] + 1), "label": y_train})
train_labels.to_csv("mnist_train_labels.csv", index=False)
print("created mnist_train_labels.csv")
test_images = pd.DataFrame(x_test)
test_images.insert(0, "id", np.arange(1, x_test.shape[0] + 1))
test_images.to_csv("mnist_test_images.csv", index=False)
print("created mnist_test_images.csv")
test_labels = pd.DataFrame({"id": np.arange(1, y_test.shape[0] + 1), "label": y_test})
test_labels.to_csv("mnist_test_labels.csv", index=False)
print("created mnist_test_labels.csv")
第5章 生成された CSV ファイルの確認
画像の CSV(mnist_train_images.csv,mnist_test_images.csv)は,1 行目が見出し(id と 0 から 783 までの画素番号),2 行目以降が各画像の画素値である。画素値は 0 から 255 の整数で,28×28 の画像を行方向に並べて 784 個に展開している。
ラベルの CSV(mnist_train_labels.csv,mnist_test_labels.csv)は,1 行目が見出し(id と label),2 行目以降が各画像の正解の数字(0 から 9)である。
画像 CSV とラベル CSV は,同じ id どうしが同じ画像に対応する。学習用は 60,000 行,テスト用は 10,000 行のデータ行になる。