===== (7)学習結果を用いて推測する(Keras) =====
Keras2でMNIST目次\\
[[Kerasプログラミングの全体図]]
-[[(1)Kerasを使用するためのimport文]]
-[[(2)データ準備(Keras)]]
-[[(3)モデル設定(Keras)]]
-[[(4)モデル学習(Keras)]]
-[[(5)結果の出力(Keras)]]
-[[(6)学習結果の保存(Keras)]]
-[[(7)推測(Keras)]] <= いまココ
Import文を記載後、モデルとパラメータを読み込み、分類したい新しい画像データをNumpy配列に変換したのち、予測を行います。
# predict.py
# predict_MNIST_MLP(Keras2.0)
#7 推測(Keras)
(途中)
作成中。
参考:
自前のデータでKerasで画像分類を写経してみる(2)\\
2017/8/5 2017/8/9 \\
http://twosquirrel.mints.ne.jp/?p=19500
===== 開発環境 =====
Windows 8.1\\
Anaconda \\
Python 3.5\\
Tensorflow 1.4\\
Keras 2.0.9\\
Keras2.0のインストール方法は[[windowsにkeras2.0をインストール]]をご覧下さい。
このページは、[[(6)学習結果の保存(Keras)]]の続きであり、今回は、学習結果を用いて、推測を行っていきます。
===== 手順 =====
==== 0. 前回終了時の画面 ====
[[(6)学習結果の保存(Keras)]]終了時は、以下のような状態となっています。
{{:pasted:20171110-070427.png}}
今回は、新しいipynbファイルを作成し、
{{:pasted:20171117-210933.png}}
predict_MNIST_MLP という名前に変更します。
{{:pasted:20171117-211034.png}}
predict_MNIST_MLP.ipynb は、train_MNIST_MLP.ipynb と同じフォルダにあります。
{{:pasted:20171117-211127.png}}
以下の状態から始めます。
{{:pasted:20171117-211216.png}}
==== 1. 推測したい画像の準備 ====
MNSIT画像は、なぜか、黒の背景に白で手書きの数字が書いてあるような画像であるので、Windows 8.1に付属している「ペイント」で、適当な手書き数字を作成し、/testSet/ フォルダに、「img_1.jpg」という名前で保存します。
{{:pasted:20171117-211948.png}}
{{:pasted:20171117-212009.png}}
==== 2. モデルの学習 ====
以下のコードを入力して、Shift + Enterを押します。
# predict.py
#7 推測
%matplotlib inline
from keras.preprocessing import image
import numpy as np
import sys
from PIL import Image
import matplotlib.pyplot as plt
from keras.models import model_from_json
# load model and weight
model = model_from_json(open('apple_orange_model.json').read())
model.load_weights('apple_orange_weights.h5')
filepath = "testSet/img_1.jpg"
# 画像を読み込み、グレースケールに変換し、28x28pixelに変換し、numpy配列へ変換する。
# 画像の1ピクセルは、それぞれが0-255の数値。
image = np.array(Image.open(filepath).convert("L").resize((28, 28)))
print(filepath)
# さらにフラットな1次元配列に変換。
image = image.reshape(1, 784).astype("float32")[0]
result = model.predict_classes(np.array([image / 255.]))
print("result:", result[0])
# 画像を表示
im = Image.open(filepath)
plt.imshow(np.array(im), cmap='gray')
以下のような画面になります。
{{:pasted:20171117-213239.png}}
{{:pasted:20171117-213300.png}}
ちゃんと、「2」と予測できたようです。
上記コードにはコメントで解説を書かせていただいておりますが、今回のポイントとしては、
from keras.models import model_from_json
# load model and weight
model = model_from_json(open('apple_orange_model.json').read())
model.load_weights('apple_orange_weights.h5')
の部分で、modelと、modelのweightを読み込んでいるところです。この2つの中身は、前回の[[(6)学習結果の保存(Keras)]]で保存した名前と一致させる必要があります。
Kerasで推測の手順は上記でおしまいです。
そして、KerasでMNISTシリーズは、一旦ここで終了となります。グレースケール画像の分類であれば、今までのコードのほぼコピペで、実行することができるようになります。
しかし、自前データで画像分類をする場合は、画像の前処理を行って、Kerasが理解できる形に変換しておかないといけません。
次は、自前データでKerasで画像分類を行う方法の解説の例として、MNISTの画像データから、Keras用データセットの作成について説明したいと思います。ご興味のある方は、ぜひ、[[Keras2用自前データの準備]]へお進みください。
===== 参考文献 =====
初めてKerasプログラミングをやるときの超おすすめ本。\\
===== リンク =====
次: [[機械学習成果をWEBで公開]]
前: [[(6)学習結果の保存(Keras)]]
Keras2でMNIST目次\\
[[Kerasプログラミングの全体図]]
-[[(1)Kerasを使用するためのimport文]]
-[[(2)データ準備(Keras)]]
-[[(3)モデル設定(Keras)]]
-[[(4)モデル学習(Keras)]]
-[[(5)結果の出力(Keras)]]
-[[(6)学習結果の保存(Keras)]]
-[[(7)推測(Keras)]]
今回で、KerasによるMNISTコードの解説シリーズはおしまいです。
次:
[[機械学習成果をWEBで公開]]