MNISTデータセットのダウンロード|Excel VBAでMNIST機械学習
大前提としてディープラーニングを行うには、機械に学習させるための”大量のデータ”が必要になります。そのため、ありがたいことにインターネット上にはディープラーニング初学者向けに様々なデータセットが公開されています。
よく使われるデータセットとして「アイリスデータ」や「ニューヨークの交通量データ」、「タイタニックの乗客名簿データ」など様々なものがあります。
MNISTもこれらと同じくよく使われるデータセットの1つです。
今回はこのMNISTデータセットとは何かから始まり、Excel VBAでディープラーニングを行うためのCSVファイル化されたMNISTデータセットのダウンロード方法までを詳しく解説していきます。
MNISTデータセットとは
MNIST(Mixed National Institute of Standards and Technology database)とは「0〜9」のいずれかの数字が書かれた手書き数字画像のデータセットです。(NISTとはアメリカ国立標準技術研究所のことを指します)
画像のサイズは28×28(px)で、各画像データには”どの数字が書かれているのか”を表す正解ラベルが付いています。
MNISTの画像データはグレースケールになっており、各ピクセルは「0~255」のいずれかの値を取ります。(白い部分=「0」、黒い部分=「255」の256段階のいずれかの色が割り当てられています)
つまり画像データとしては28×28の計784個の数値の集まりでできています。
先にも出てきた通り”どの数字が書かれているのか”を表す正解ラベルも一緒に付いてくるため、MNISTの画像データは「画像データのピクセル値:784個」+「正解ラベル:1個」の計785個の数値で表されます。
MNISTデータセットには、この785個の数値から成る画像データが学習用に60000枚分、テスト用に10000枚分の計70000枚分用意されています。
これらの膨大な画像データをニューラルネットワークに学習させることで、「0~9」の手描き数字を認識することが可能になります。
・画像データは学習用に60000枚、テスト用に10000枚の計70000枚分
・画像データは正解ラベル1個+ピクセル値784(28×28)個の計785個の数値でできている
・ピクセル値は「0~255」の256段階で表されている
MNISTデータセットをダウンロード
Pythonの場合はコード上でMNISTデータセットをダウンロードすることが出来ますが、本サイトでやっている「Excel VBAでニューラルネットワークを再現|MNIST学習で文字認識」ではVBAでニューラルネットワークを学習させていくので、予め「CSV形式」のMNISTデータセットをダウンロードしておく必要があります。
下記サイトより以下2つのファイルをダウンロードしましょう。
・mnist_train.csv [学習(train)用データセット]
・mnist_test.csv [テスト(test)用データセット]
前項でも説明した通り、学習用の「mnist_train.csv」には60000枚分、テスト用の「mnist_test.csv」には10000枚分の画像データが入っています。
学習用とテスト用の2つのファイルに分けられていますが、それぞれ持っている画像データの数が違うだけで、中身の構成は同じです。
MNISTの中身を確認
ダウンロードしたCSVファイルをExcelで開き、中身を確認していきます。
ファイルの中身は下画像のように数字の羅列になっています。
mnist_train.csvは60000行785列、mnist_test.csvは10000行785列のデータ構成になっています。
これまでの説明を理解していると察すると思いますが、このCSVファイルの1行1行が1枚の画像データを表しています。
列は各画像の「正解ラベル:1個」と「画像データのピクセル値:784個」を表しています。
列でいうと1列目(A列)が各画像の正解ラベル、以降の784列がピクセル値を表しています。
たとえば1行目の場合、1列目(A列)には「5」と書いてありますが、これは1行目の2列目(B列)以降の784個の数値が「5」の描かれた画像データであるということを表しています。
784個の数値は1行に並んでいますが、実際に画像として見るには28×28に並び変える必要があります。以下ではVBAコードで「1×784」のデータを「28×28」に変換して画像データを可視化していきます。
CSVファイルを可視化
Pythonの場合は「matplotlib」というライブラリを使って画像データを可視化させることができますが、Excel VBAにはもちろんそのようなライブラリは用意されていません。
というわけでExcelの強みである「セル」を使ってMNIST画像データの可視化をしてみましょう。
ここではデータの確認だけなので、データ数の少ない「mnist_test.csv」を使います。
まずは空白のブックを用意して、シートの「移動またはコピー」を使ってmnist_test.csvの「mnist_test」シートをそのままコピペして以下のようにしておきましょう。
つぎにVBAで以下のコードを実行しましょう。
「mnist_test」シートからランダムに1行選び、正解ラベルを除いた784列を28行×28列に並び変えるだけの単純なコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
Option Explicit Sub MNIST_Visualization() Application.ScreenUpdating = False 'シート定義 Dim MNISTSheet As Worksheet Set MNISTSheet = Worksheets.Item("mnist_test") Dim ExportSheet As Worksheet Set ExportSheet = Worksheets.Item("Sheet1") ExportSheet.Cells.ClearContents ExportSheet.Range(Rows(1), Rows(28)).RowHeight = 22.5 ExportSheet.Range(Columns(1), Columns(28)).ColumnWidth = 3.13 'minist_testからランダムで1行を取得 Dim RandRow As Long RandRow = Int((10000 - 1 + 1) * Rnd + 1) '「1x784」を「28x28」に変換して書き出し Dim i As Long Dim j As Long Dim cnt As Long cnt = 2 For i = 1 To 28 For j = 1 To 28 ExportSheet.Cells(i, j) = MNISTSheet.Cells(RandRow, cnt) cnt = cnt + 1 Next j Next i '正解ラベルを表示 ExportSheet.Cells(30, 1).Value = "正解" ExportSheet.Cells(30, 2).Value = MNISTSheet.Cells(RandRow, 1) Application.ScreenUpdating = True End Sub |
実行すると「Sheet1」には以下のように784個の数値が28×28の形で出力されます。
なんとなくは何かが書いてあると認識できますが、まだ少しわかりづらいので色を付けます。
書き出した28×28のセルをすべて選択して([Ctrl]+[A]でも選択可能)、
[ホーム]タブ>[条件付き書式]>[カラースケール]>[その他のルール]をクリックします。
すると以下のようなウィンドウが立ち上がるので、最小値の色を「白」、最大値の色を「黒」に変更します。これで各ピクセル値に応じた色を付けることができます。
条件付き書式を設定すると以下のようになります。
B30セルにこの画像データの正解ラベルを書き出しているので、その画像データが何の数字を表しているかを確認することができます。
ここではデータ構成を確認するためのものなので28×28に変換して可視化を行いましたが、ニューラルネットで学習をする際は変換する必要はありません。(むしろ1行のままの方が都合がいいです)
ただ、最終的に自身が書いた手書き数字画像をニューラルネットワークに取り込む際に、この28×28の構成が重要になってくるのでしっかりと押さえておきましょう。
まとめ
今回はMNISTデータセットについて解説をしました。
内容をまとめると以下の通りです。
・MNISTデータセットは「0~9」が描かれた手描き数字画像データがまとまったデータセット
・画像データは学習用に60000枚、テスト用に10000枚の計70000枚分
・画像データは正解ラベル1個+ピクセル値784(28×28)個の計785個の数値でできている
・ピクセル値は「0~255」の256段階で表されている
・ピクセル値は28×28に並び替えることで画像として可視化が可能
・MNIST(CSVファイル)のダウンロードは MNIST in CSV and PNG(github) から
MNISTデータセット(CSV)のデータ構成は、ニューラルネットワークを作成する上で理解しておく必要があるので必ず押さえておきましょう。
ダウンロードした2つのCSVファイルも今後使うので、保管しておいてください。