【Chainerで画像識別2】画像識別の初級をやってみよう。MNISTからデータの読み込み

【Chainerで画像識別2】画像識別の初級をやってみよう。MNISTからデータの読み込み

推しメンは、長沢 菜々香です。

 

ども、アイーンです。

Chainerによる画像認識第2回、今回はMNIST(エムニスト)を使って手書き文字のデータを読み込んでみたいと思います。

MNISTとは?

MNISTとは、全部で70000個ある手書きの数字を画像にしてまとめたデータセットです。

上の画像がサンプルですね。

1つの文字は28×28ピクセルで出来てます。

中身には、個別に正解ラベルが付いているため、これを用いて手書き文字を学習させることができます。

もはや有名&有能過ぎて、ディープラーニングのワークフレームの能力を比較するための存在と化してます。

 

画像を扱う際のtips

画像をデータとしてみる場合、通常は「チャンネル・高さ・幅 」という形で扱われます。

チャネルとは、色情報のことです。

チャネル1ならモノクロ(グレースケール)
チャネル3なら赤・青・緑という色情報を持ちます。

RGB形式ですね。

今回のMNISTは、モノクロのデータです。

 

 

 

それではコードに行ってみましょう。

MNISTによる手書き文字の画像読み込み

今回のコードを全部載せときます。

はいドン

import chainer
import chainer.links as L
import chainer.functions as F
from chainer import Variable,Chain,optimizers,serializers,datasets

import numpy as np
import matplotlib.pyplot as plt

from chainer.datasets import tuple_dataset
from chainer import training, iterators
from chainer.training import extensions


#データの読み込み
mnist_data = datasets.get_mnist(ndim=3)
train_data = mnist_data[0]
test_data = mnist_data[1]

print("Train:" , len(train_data))
print("TEST:" , len(test_data))

index = 0
plt.imshow(train_data[index][0].reshape(28,28) , cmap = "gray")
plt.title(train_data[index][1])
plt.show()

インポートは割愛するよ~

mnist_data = datasets.get_mnist(ndim=3)

mnist_dataの中にデータセットを取り込みます。

この際、ndim(次元数)を指定する必要があります。

ndim=1とすると、画像の次元が一次元(784, )
ndim=2とすると、ペラッペラの縦横二次元(28, 28)
ndim=3とすると、チャネル(カラー情報)が追加され三次元(1, 28, 28)になります。

 

自分でデータセットを作る際の参考に覚えときます。

いつか。いつかね。

 

train_data = mnist_data[0]
test_data = mnist_data[1]

MNISTの助かる点。

取り込んだデータセットの[0]に訓練データ、[1]にテストデータが既に準備されてました。

train_dataとtest_dataに分けときましょう。

 

print(“Train:” , len(train_data))
print(“TEST:” , len(test_data))

を使って中身の量を確認すると…

Train: 60000
TEST: 10000

と、表示されます。

 

index = 0
plt.imshow(train_data[index][0].reshape(28,28) , cmap = “gray”)
plt.title(train_data[index][1])
plt.show()

最後の4行で、matplotlibを使って画像データと正解ラベルを見てみましょう。

タイトルには正解ラベルを表示します。

すると・・・

 

できた~!

これは・・・「5」・・・なのか?

幼児か?幼児が書いたのか?

幼いころ、こんな感じで上の潰れた「3」を書いてた気がする。

 

あ、正解ラベルが5になってる。

 

一瞬怪しかったですが、訓練を担当する者としてデータを見間違うわけにはいきませんよね。

 

ちなみに、indexの数値を変えれば別のデータが確認できます。

index = 1なら

0ですね。上にちょろっと出てる線は

”若気の至り”で勢い余ったんでしょう。

 

index = 138なら

釣り針ですね。

誰だ、釣り針混ぜたの。

 

まとめ

というわけで、今回は訓練に使うデータセットをMNISTから読みだすところまでやってみました。

本当に数字画像のデータセットかどうか、確信が持てません。

 

次回は、コイツを使って訓練を行っていきましょう。

 

これで貴方の肩書は「エムニスト」です。

・・・華麗にMを使いこなすイメージ。

 

ではまた。