Jupyter Notebook+Kerasで機械学習

Ubuntu16.04LTS上に構築したJupyter Notebook環境でMNIST手書き数字データベースを使用しKerasで機械学習を実行します。

MNIST手書き数字を使用するチュートリアルはネット上に多数アップされています。ですがそのほとんどは機械学習の成果としてAcc(正解率)やloss(損失率)を数字又はグラフで表示しているだけです。今一つ機械学習の有効性がわかりません。

そこで当記事では機械学習の検証結果を視覚的に理解できる形で出力することでその有効性を確認したいと思います。具体的にはテストデータイメージ(問題)とその機械学習検証結果(答え)を対にして出力しその判定結果を評価します。

1.MNISTデータの確認

今回使用するのは、mnistライブラリに含まれるアメリカ国立標準技術研究所(NIST)が用意した手書き数字の画像データベースです。手書き数字画像は28×28ドットのピクセルデータです。数字画像データベースは6万枚分のトレーニング(学習)データと1万枚分のテスト(訓練)データから構成されています。

(1)手書き文字確認コード

Jupyter Notebookを開いて以下のコードを入力し実行します。mnist.load_data()は初回時にデータをダウンロードしてくる為多少の時間を要します。実行が終わると学習データの先頭100画像が表示されます。

(2)出力結果

以下の通りランダムに振られた手書き文字画像が確認できました。

2.モデル作成とコンパイル

Jupyter Notebookの次セルに以下のコードを入力し実行します。実行は瞬時に終わります。実行後特に画面表示されるものはありません。

上記コードではトレーニングデータとテストデータの正規化、モデルの作成とコンパイルをしています。

3.トレーニング
(1)実行コード

Jupyter Notebookの次セルに以下のコードを入力し実行します。

上記コードでは作成したモデルとmnistデータを使用して機械学習を実行し結果をhistoryに代入しています。

(2)実行結果

以下のlossとaccがセットになった実行状況がepochs で指定された回数分出力されてます。

20回のトレーニングの結果、loss(損失率):0.3602、Acc(正解率):0.8993になりました。

4.機械学習結果のグラフ化
(1)実行コード

Jupyter Notebookの次セルに以下のコードを入力し実行します。

(2)実行結果

繰り返し学習によるAcc(正解率)とloss(損失率)の収束状況がグラフで確認できます。

5.機械学習判定結果の評価

テストデータ10000枚の中からランダムに10枚を抽出し、作成したモデルで機械学習の判定結果を評価してみます。

(1)評価データ抽出と表示

Jupyter Notebookの次セルに以下のコードを入力し実行します。

(2)抽出画像出力

以下の10枚の画像がランダムに抽出されました。

(3)作成したモデルによる判定

Jupyter Notebookの次セルに以下のコードを入力し実行します。

(1)で抽出した10枚の画像データを対象にpredictで判定を行い結果をprint文で出力しています。

(4)実行結果

以下の結果が出力されました。左から数えた画像データに対し上から数えた出力結果が対応しています。機械学習モデルが出力した結果の右側コメントは、私が画像データから判断した回答との正誤です。○が正解,×が不正解です。

(5)評価

今回の抽出データでは10枚中8枚が正解で正解率は80%になりました。作成したモデルの正解率:0.8993に近い値です。間違えたデータは下記2枚です。

1番目のデータ:70%の確率で8と判定されました。わかりにくいですが3のようです。

8番目のデータ:41%の確率で7と判定されましたが2のようです。

今回は10枚のデータによる判定ですのでACCとの誤差が10%程度ありますが評価する枚数を増やせば結果はACCの値に近づきます。上記画像の形状と判定結果を対比してみると今回の機械学習モデルはまずまずの判定結果と評価できます。

6.参考にさせて頂いたサイト

ディープラーニング実践入門 〜 Kerasライブラリで画像認識をはじめよう!

KerasではじめるDeepLearning

ありがとうございます。

スポンサーリンク
レクタングル大広告




レクタングル大広告




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
レクタングル大広告