Pythonの深層学習モジュール「Keras」とCNN(畳み込みニューラルネットワーク)で手書き文字認識(mnist)の学習・識別方法をソースコード付きで解説します。
【Keras】CNN(畳み込みニューラルネットワーク)で手書き文字認識
Pythonの深層学習モジュール「Keras」とCNN(畳み込みニューラルネットワーク)で手書き文字画像の分類を行います。
動画解説
本ページの内容は以下動画でも解説しています。
CNNとは
畳み込みニューラルネットワーク(CNN:Convolutional Neural Network)とは、ディープラーニングの手法の1つで、主に画像認識に利用されています。
ニューラルネットワークの重み計算に「畳み込み演算(Convolution)」が用いられていることから、CNNと呼ばれています。
404 NOT FOUND | Python入門速報
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」 |
One-Hotエンコーディング | One-Hotとは、「1つだけ1でそれ以外は0のベクトル(行列)」のことです。One-Hotエンコーディングは、カテゴリー変数をOne-Hotのベクトル(行列)に変換することです。 |
【サンプルコード1】データセットを使って分類器を作成
サンプルプログラムのソースコードです。
【サンプルコード2】作成した分類器で手書き画像の分類
作成した分類器をロードし、以下の「2」と描かれた画像を入力して、数字を当てられるか試してみます。
画像のロード、変換等はOpenCVを使います。
無事に「2」と正解できました。
【TensorFlow版Keras入門】ディープラーニングを簡単に学ぶ方法
Pythonモジュール「TensorFlow/Keras」で深層学習(ディープラーニング)を行う方法について入門者向けに使い方を解説します。
コメント
初心者です。
サンプルコード2の7行目で
cannot import name ‘np_utils’ from ‘tensorflow.keras.utils’
というエラーが出たのですが、[pip install np_utils] を入れても治りません対処法はありますか?
コメントありがとうございます。
最新のTensorFlowだとkeras.utilsが最初から組み込まれているはずですので、お使いのTensorFlowのバージョンを確認されてみてはと思います。
Python「Keras」とCNNを用いた手書き文字識別を解説をいただきありがとうございます!
ソースコード内に十分にコメントを記載いただいているため、わかりやすかったです。
サンプルコード1の17-18行目について、そのままだと私のほうではエラーとなってしまいましたが、「accuracy」を「acc」に変えることでエラーなく動きました。
(環境 tensorflow:1.14.0、keras 2.2.4)