この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
7_推測_keras [2017/10/28] adash333 [リンク] |
7_推測_keras [2018/10/07] (現在) |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
===== (7)学習結果を用いて推測する(Keras) ===== | ===== (7)学習結果を用いて推測する(Keras) ===== | ||
- | <KerasでMNIST目次>\\ | + | <wrap hi>Keras2でMNIST目次</wrap>\\ |
- | [[Kerasプログラミングの全体図]]\\ | + | [[Kerasプログラミングの全体図]] |
- | [[(1)Kerasを使用するためのimport文]]\\ | + | -[[(1)Kerasを使用するためのimport文]] |
- | [[(2)データ準備(Keras)]]\\ | + | -[[(2)データ準備(Keras)]] |
- | [[(3)モデル設定(Keras)]]\\ | + | -[[(3)モデル設定(Keras)]] |
- | [[(4)モデル学習(Keras)]]\\ | + | -[[(4)モデル学習(Keras)]] |
- | [[(5)結果の出力(Keras)]]\\ | + | -[[(5)結果の出力(Keras)]] |
- | [[(6)学習結果の保存(Keras)]]\\ | + | -[[(6)学習結果の保存(Keras)]] |
- | (7)推測(Keras) ←いまココ | + | -[[(7)推測(Keras)]] <wrap hi><= いまココ</wrap> |
- | \\ | + | |
- | 最初に以下をコピペするだけですが、プログラムごとに、さらにimport文の追加が必要になる場合があります。 | + | Import文を記載後、モデルとパラメータを読み込み、分類したい新しい画像データをNumpy配列に変換したのち、予測を行います。 |
<code> | <code> | ||
- | import keras | + | # predict.py |
- | from keras.models import Sequential | + | # predict_MNIST_MLP(Keras2.0) |
- | from keras.layers import Dense, Dropout | + | #7 推測(Keras) |
- | from keras.optimizers import RMSprop | + | |
- | from keras.utils import np_utils | + | |
- | from sklearn.model_selection import train_test_split | + | (途中) |
+ | </code> | ||
+ | |||
+ | 作成中。 | ||
+ | |||
+ | 参考: | ||
+ | 自前のデータで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を押します。 | ||
+ | |||
+ | <code> | ||
+ | # predict.py | ||
+ | #7 推測 | ||
+ | |||
+ | %matplotlib inline | ||
+ | |||
+ | from keras.preprocessing import image | ||
import numpy as np | import numpy as np | ||
+ | import sys | ||
from PIL import Image | from PIL import Image | ||
- | import os | + | 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') | ||
</code> | </code> | ||
- | 始めはかなりとっつきにくいimport文ですが、pythonの勉強をしていくにつれて、徐々に、慣れてきます。 | + | 以下のような画面になります。 |
+ | |||
+ | {{:pasted:20171117-213239.png}} | ||
+ | |||
+ | {{:pasted:20171117-213300.png}} | ||
+ | |||
+ | ちゃんと、「2」と予測できたようです。 | ||
+ | |||
+ | 上記コードにはコメントで解説を書かせていただいておりますが、今回のポイントとしては、 | ||
+ | |||
+ | <code> | ||
+ | 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') | ||
+ | </code> | ||
+ | の部分で、modelと、modelのweightを読み込んでいるところです。この2つの中身は、前回の<wrap hi>[[(6)学習結果の保存(Keras)]]</wrap>で保存した名前と一致させる必要があります。 | ||
+ | |||
+ | Kerasで推測の手順は上記でおしまいです。 | ||
+ | |||
+ | そして、KerasでMNISTシリーズは、一旦ここで終了となります。グレースケール画像の分類であれば、今までのコードのほぼコピペで、実行することができるようになります。 | ||
+ | |||
+ | しかし、自前データで画像分類をする場合は、画像の前処理を行って、Kerasが理解できる形に変換しておかないといけません。 | ||
+ | |||
+ | 次は、自前データでKerasで画像分類を行う方法の解説の例として、MNISTの画像データから、Keras用データセットの作成について説明したいと思います。ご興味のある方は、ぜひ、<wrap hi>[[Keras2用自前データの準備]]</wrap>へお進みください。 | ||
- | keras特有のもの以外のimport文については、以下のリンクをご覧ください。 | ||
- | 機械学習で用いるpythonの”import xxx”まとめ\\ | ||
- | 2017/10/25\\ | ||
- | http://twosquirrel.mints.ne.jp/?p=20344 | ||
ライン 50: | ライン 154: | ||
===== リンク ===== | ===== リンク ===== | ||
- | 目次\\ | + | 次: [[機械学習成果をWEBで公開]] |
- | [[Kerasプログラミングの全体図]]\\ | + | |
- | [[(1)Kerasを使用するためのimport文]]\\ | + | 前: [[(6)学習結果の保存(Keras)]] |
- | [[(2)データ準備(Keras)]]\\ | + | |
- | [[(3)モデル設定(Keras)]]\\ | + | |
- | [[(4)モデル学習(Keras)]]\\ | + | <wrap hi>Keras2でMNIST目次</wrap>\\ |
- | [[(5)結果の出力(Keras)]]\\ | + | [[Kerasプログラミングの全体図]] |
- | [[(6)学習結果の保存(Keras)]]\\ | + | -[[(1)Kerasを使用するためのimport文]] |
- | (7)推測(Keras) ←いまココ | + | -[[(2)データ準備(Keras)]] |
- | \\ | + | -[[(3)モデル設定(Keras)]] |
+ | -[[(4)モデル学習(Keras)]] | ||
+ | -[[(5)結果の出力(Keras)]] | ||
+ | -[[(6)学習結果の保存(Keras)]] | ||
+ | -[[(7)推測(Keras)]] | ||
+ | |||
今回で、KerasによるMNISTコードの解説シリーズはおしまいです。 | 今回で、KerasによるMNISTコードの解説シリーズはおしまいです。 |