- 人工知能
- 2018/06/19
機械学習で便利な画像データセット「MNIST」を丁寧に解説!
機械学習の画像認識の学習において、初心者でも使いやすく、サンプルデータとしてもよく利用されているのが「MNIST(エムニスト)」のデータセットです。MNISTは使いやすさだけではなく、他のライブラリでも簡単に取得することができる、応用力の高いデータセットです。
この記事ではMNISTとは何かをわかりやすく解説。さらに、ダウンロード方法やTensorflowやKeras、Chainer(※1)での取得方法まで紹介します。
(※1)2019年Preferred Networks(PFN)は2019年12月、同社が開発する深層学習フレームワーク「Chainer」のメジャーアップデートを終了すると発表。今後は、米Facebookが主導する深層学習フレームワーク「PyTorch」へ順次移行する。
MNISTとは?
MNIST(Mixed National Institute of Standards and Technology database)とは、手書き数字画像60,000枚と、テスト画像10,000枚を集めた、画像データセットです。さらに、手書きの数字「0〜9」に正解ラベルが与えられるデータセットでもあり、画像分類問題で人気の高いデータセットです。
MNISTは深層学習(ディープラーニング)の手法の1つであるニューラルネットワークを学ぶ上でも便利ですし、機械学習の入門のデータセットとしてもよく使われています。
手軽に入手できる点も含めて、人工知能(AI)の勉強を始める入り口としてMNISTは人気の高いデータセットです。
コンピュータ・ビジョンとは?
MNIST解説する前に、覚えておいていただきたいのが「コンピュータ・ビジョン」です。
コンピュータ・ビジョンとは、科学技術分野のうちの1つで、コンピュータを用いた視覚( Vision)の実現を研究する学術分野です。
コンピュータ・ビジョンを活用して行える例として、画像分類や画像認識があります。畳み込みニューラルネットワークを使用すれば、これらの分類や認識を良好に機能させてくれます。
畳み込みニューラルネットワークは深い層を持った、ニューラルネットワークの種類のうちの1つですが、ニューラルネットワークについて詳しく知りたい人は「ニューラルネットワークとは?人工知能の基本を初心者向けに解説!」を見てみてください。
そして、コンピュータ・ビジョンを活用しているものの1つに、MNISTがあります。MINSTは、コンピュータ・ビジョンを使用し、手書きの数字が書かれている画像データから正解ラベルを導き出すことができます。
MNISTは教師あり学習のデータセットなので、学習データには正解ラベル、もしくはクラスが与えられています。(詳しくは次の章で解説します)
MNISTのデータ仕様について
続いてMNISTのデータ仕様についてわかりやすく解説します。
MNISTのデータセットは、手書きで書かれた数字が画像になった画像データと、その画像に書かれた数字の正解となるラベルデータで構成されています。そして、画像データとラベルデータのペアは学習用に60,000個、検証用に10,000個あります。
そして、MNISTのデータは以下の4つのファイルで構成されています。
・train-images-idx3-ubyte: 学習用の画像データセット
・train-labels-idx1-ubyte: 学習用のラベルデータセット
・t10k-images-idx3-ubyte:検証用の画像データセット
・t10k-labels-idx1-ubyte:検証用のラベルデータセット
MNISTの画像データについて
まずは、MNISTのデータセットに含まれている、学習用の画像データセット(train-images-idx3-ubyte)と、検証用の画像データセット(t10k-images-idx3-ubyte)のフォーマットについて解説します。
画像データセットのフォーマットは以下になります。
offset | type | value | description |
0000 | 32 bit integer | 0x00000803(2051) | 識別子(定数) |
0004 | 32 bit integer | 60000 | 画像データの数 |
0008 | 32 bit integer | 28 | 1画像あたりのデータ行数 |
0012 | 32 bit integer | 28 | 1画像あたりのデータ列数 |
0016 | unsigned byte | 0〜255 | 1つ目の画像の1ピクセル目の値 |
0017 | unsigned byte | 0〜255 | 1つ目の画像の2ピクセル目の値 |
xxxx | unsigned byte | 0〜255 | 最後の画像の784ピクセル目の値 |
画素数であるピクセルの値は、0から255まであり、0が白、255が黒を表しています。
ラベルデータについて
つづいて、MNISTの学習用のラベルデータ(train-labels-idx1-ubyte)と、検証用のラベルデータ(t10k-labels-idx1-ubyte)について解説します。
ラベルデータのフォーマットは以下になります。
offset | type | value | description |
0000 | 32 bit integer | 0x00000801(2049) | 識別子(定数) |
0004 | 32 bit integer | 60000 or 10000 | ラベルデータの数 |
0008 | unsigned byte | 0〜9 | 1つ目のデータのラベル |
0009 | unsigned byte | 0〜9 | 2つ目のデータのラベル |
xxxx | unsigned byte | 0〜9 | 最後のデータのラベル |
ラベルは画像がどの数字を表しているのかを示す、0から9までの数値です。
【簡単】MNISTのダウンロード方法!
最後に、MNISTのダウンロード方法、そして「Tensorflow」「Keras」「Chainer(※1)」のライブラリ別でのデータ利用方法について解説します。
MNISTはこちらのサイトからダウンロードできます。サイトに書かれている以下の項目をダウンロードしてください。
train-images-idx3-ubyte.gz: training set images (9912422 bytes)
train-labels-idx1-ubyte.gz: training set labels (28881 bytes)
t10k-images-idx3-ubyte.gz: test set images (1648877 bytes)
t10k-labels-idx1-ubyte.gz: test set labels (4542 bytes)
■Tensorflow(テンソルフロー)の場合
Googleが提供するオープンソフトライブラリである「Tensorflow」には、MNISTデータを使用したチュートリアルがあります。「Tensorflow」をインストールした後、以下のinput_dateを使用することで取得できます。
from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets(“/tmp/mnist_data/”, one_hot=True)
■Keras の場合
Pythonで書かれたオープンソースニューラルネットワークライブラリである「Keras」でも、MNISTデータセットが提供されています。以下のコードを書けばKerasでもMNISTデータセットを取得できます。
from keras.datasets import mnist (x_train, y_train), (x_test, y_test) = mnist.load_data()
■Chainer の場合(※1)
さらに、ニューラルネットワークの計算、そして学習をするオープンソースソフトウェアライブラリである「Chainer」でもMNISTデータセットを取得することができます。以下のコードでMNISTデータセットを取得することができます。
import chainer train, test = chainer.datasets.get_mnist()
(※1)2019年Preferred Networks(PFN)は2019年12月、同社が開発する深層学習フレームワーク「Chainer」のメジャーアップデートを終了すると発表。今後は、米Facebookが主導する深層学習フレームワーク「PyTorch」へ順次移行する。
人工知能(AI)や機械学習のサンプルデータとして頻繁に利用されるのが、MNISTのデータセットです。MNISTの学習を入り口にして、人工知能(AI)を学び始めてみてはいかがでしょうか?
AI・機械学習・データサイエンスを基礎から学ぶ
初心者向けの人工知能と機械学習
みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習 【2022年最新版】
Pythonを使って、機械学習とプログラミングの基礎、必要な数学を勉強しましょう!
機械学習がよくわかる
【キカガク流】人工知能・機械学習 脱ブラックボックス講座 - 初級編 -
機械学習の考え方、微分、単回帰分析まで一気通貫で解説します。
データサイエンスを深堀り
【世界で34万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜
データサイエンティストになるために必要な一連のツールについて学べる!
ディープラーニングを理解!
【Hands Onで学ぶ】PyTorchによる深層学習入門
機械学習・深層学習の復習やPyTorchのライブラリの基本的な使い方など基礎的な内容から段階的にステップアッ
関連記事

【入門者でもわかる】Kerasとは?基礎から丁寧に解説!
ここ数年でバズワードとなっているのが「人工知能(AI)」です…

【入門編】PyTorchとは何か?インストールから実装までわかりやすく解説
『PyTorch』とは、Facebookが開発を主導したPython向けの機械…

Pythonとは?Pythonを使ってできること・特徴を詳しく解説!
プログラミング言語のPythonとは何かについて、Pythonでの開発…

【TENSORFLOW入門】特徴や使い方をわかりやすく解説!
最近、ECサイトでの購入履歴を参照し、おすすめ商品がサイトに…
最新情報・キャンペーン情報発信中