- Neural NetworkとTensorflowについて
- 画像の処理について
- CNNの学習(Keras)について
- CNNに学習させてモデルを保存する
- 保存した学習したモデルを使って予測を行う(今回記事)
- Google Colabについて
- AutoKerasについて
数字を認識するConvolutional Neural Network (CNN)をkerasで作っていきます。前回の記事では自分で用意した学習用の画像を、CNNに学習させて学習させたモデルを保存しました。今回は、保存したモデルを読み込んで予測します。
Jupyternotebookを使用します。
さっそく前回保存したh5ファイルを読み込んで、モデルの形をみてみます。
from tensorflow.keras.models import load_model
model = load_model(r"C:\Users\my_model.h5")
model.summary()
Layer (type) | Output Shape | Param # |
conv2d (Conv2D) | (None, 140, 290, 32) | 11648 |
activation (Activation) | (None, 140, 290, 32) | 0 |
max_pooling2d (MaxPooling2D) | (None, 70, 145, 32) | 0 |
conv2d_1 (Conv2D) | (None, 68, 143, 64) | 18496 |
activation_1 (Activation) | (None, 68, 143, 64) | 0 |
max_pooling2d_1 (MaxPooling2D) | (None, 34, 71, 64) | 0 |
flatten (Flatten) | (None, 154496) | 0 |
dense (Dense) | (None, 514) | 79411458 |
activation_2 (Activation) | (None, 514) | 0 |
dropout (Dropout) | (None, 514) | 0 |
dense_1 (Dense) | (None, 10) | 5150 |
activation_3 (Activation) | (None, 10) | 0 |
保存する前と全く同じ形がでてきました。うまくいってそうです。
このモデルを使って、1枚の画像を予測してみたいと思います。
予想したい画像を1枚読み込んでみます。CNNに読み込ませるために、numpy arrayの形にします。最後に、array_to_imgで実際の画像を見てみます。
from tensorflow.keras.preprocessing.image import load_img, img_to_array,array_to_img
import numpy as np
img_rows = 150 # 縦ピクセル
img_cols = 300 # 横ピクセル
# classlist = ["0","1","2","3","4","5","6","7","8","9"]
X_trial = []
img = load_img(r"C:\Users\1\1.jpg",
target_size=(img_rows,img_cols))
x = img_to_array(img)
x = x.astype('float32')
x = x/255 # scaling
X_trial.append(x)
X_trial = np.array(X_trial, dtype='float')
array_to_img(X_trial[0])
1です。縦と横のアスペクト比を間違えてしまいました。でも、CNNに学習させた画像もこのアスペクト比なので同じままにします。パソコンには関係ないでしょう!!
読み込んだモデルで予想するには、predictを使います。各クラスの確率が示されます。
pred = model.predict(X_trial)
print(pred)
[[1.4910665e-08 9.9999964e-01 1.0234755e-08 1.3214522e-07 4.7703184e-09 6.2747723e-09 9.2011391e-08 6.2187524e-08 6.1568672e-10 1.0476766e-08]]
よくわからないので、roundします。
print(np.round(pred,decimals=1))
[[0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]] 確率が最大のインデックスを取るには、以下のコードです。
np.argmax(pred)
1
予想カテゴリは[“0″,”1″,”2″,”3″,”4″,”5″,”6″,”7″,”8″,”9”]なので、インデックス1は、”1”を示しています。正解です。
今度は4を予想します。
pred = model.predict(X_trial)
print(np.round(pred,decimals=1))
print(np.argmax(pred))
[[0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]] 4
うまく予想できていますね!