【Python/Keras】CNNで手書き文字認識(mnist)の学習・識別

Pythonの深層学習モジュール「Keras」とCNN(畳み込みニューラルネットワーク)で手書き文字認識(mnist)の学習・識別方法をソースコード付きで解説します。

【Keras】CNN(畳み込みニューラルネットワーク)で手書き文字認識

Pythonの深層学習モジュール「Keras」とCNN(畳み込みニューラルネットワーク)で手書き文字画像の分類を行います。

動画解説

本ページの内容は以下動画でも解説しています。

CNNとは

畳み込みニューラルネットワーク(CNN:Convolutional Neural Network)とは、ディープラーニングの手法の1つで、主に画像認識に利用されています。
ニューラルネットワークの重み計算に「畳み込み演算(Convolution)」が用いられていることから、CNNと呼ばれています。

【CNN】畳み込みニューラルネットワークの原理・仕組み
CNN(畳み込みニューラルネットワーク)の原理・仕組みについてまとめました。畳み込みニューラルネットワーク(CNN)とは畳み込みニューラルネットワーク(CNN:Convolutional Neural Network)とは、ディー...

mnistとは

mnistのデータセットは、「6万枚の手書き数字の学習用画像」と「1万枚のテスト画像」が格納されています。
これらの画像は全て28×28[px]のグレースケール画像となっています。
mnistのデータセットは、機械学習の性能評価によく用いられます。

MNISTの手書き数字画像

入力データ 1つの数字が書かれた画像データ。MNISTの画像1つは 28×28(=784)pxの大きさです。 1pxに「白:255」〜「黒:0」までの色情報が記録されています。 1つの画像の全てのピクセルの情報を入力するので、入力数は784個となる。
出力データ 入力された画像データが「0」〜「9」のどの数字画像なのか、その確率を「0」〜「9」毎に出力。そのため出力数は10で、最も確率の高いものが、予測結果の数字となる。

例「0.7, 0, 0, 0, 0, 0, 0.2, 0, 0, 0.1」
(0の確率70%, 6の確率20%, 9の確率10%, 他0%)

One-Hotエンコーディング One-Hotとは、「1つだけ1でそれ以外は0のベクトル(行列)」のことです。One-Hotエンコーディングは、カテゴリー変数をOne-Hotのベクトル(行列)に変換することです。

【サンプルコード1】データセットを使って分類器を作成

サンプルプログラムのソースコードです。


【サンプルコード2】作成した分類器で手書き画像の分類

作成した分類器をロードし、以下の「2」と描かれた画像を入力して、数字を当てられるか試してみます。
画像のロード、変換等はOpenCVを使います。


無事に「2」と正解できました。

【Keras入門】ディープラーニングの使い方/サンプル集
Pythonモジュール「Keras」で深層学習(ディープラーニング)を行う方法について入門者向けに使い方を解説します。

コメント

タイトルとURLをコピーしました