Reference
チュートリアル
MNISTの学習データを用いて、画像認識させるニューラルネットワークの手順のまとめ。
MNIST
「0」〜「9」の手書きの数字のデータセット。一つの数字につき$28\times28$のピクセルに分け、1ピクセル8bit 256段階の色分けが行われている。kerasの提供するAPIで簡単に読み込むことができる。
>>> from keras.datasets import mnist
>>> (x_train, y_train), (x_test, y_test) = mnist.load_data()
>>> x_train[0]
array([[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0],
・・・ (省略)
>>> y_train[0]
5
入力情報を、1次元の配列に変換する。
>>> x_train = x_train.reshape(60000, 784)
>>> x_train[0]
array([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
また、正解データをone-hotエンコーディング(ダミー変数)に変換する。最終の出力層で確率として学習値と比較するので、例えば5であれば[0,0,0,0,0,1,0,0,0,0,]という行列にする。これもkerasのAPIを使用して作ることができる。
>>> y_train = keras.utils.to_categorical(y_train, 10)
>>> y_test = keras.utils.to_categorical(y_test, 10)
ニューラルネットワークモデル
- 入力層
- MNIST1枚のピクセル28×28=784ピクセルの情報を入力情報にする。
- 隠し層
- 何層でするか、は要チューニング
- 出力層
- 「0」〜「9」に対応する10ノード、出力値はその数字である確率に対応する
画像認識
チュートリアルにおける簡単なコーディングを踏まえ、より実践的な画像認識に移る。最終的な挑戦目標は人物の輪郭を抽出すること。