分析

前節我們提到,在產生模型時,可以預留一些data進行預估模擬
實際上我們還是會希望由外部檔案進行model的測試

from keras.models import load_model
from keras.utils import np_utils
import pandas as pd

# 載入測試資料(正規化的feature,label陣列)
feature_ary = np.fromfile("/test_feature_ary/path", dtype=np.uint8)
feature_ary = feature_ary.reshape(n, h, w, 3)
label_ary = np.fromfile("/test_label_ary/path", dtype=np.uint8)
label_ary = label_ary.reshape(n, 1)
feature_ary_normalized = feature_ary.astype('float32') / 255
label_ary_onehot = np_utils.to_categorical(label_ary)

# 載入訓練好的model
model = load_model("/your/model/path")

得到model以後,可以先察看待驗證資料的accuracy及預估值

evalution = model.evaluate(feature_ary_normalized, label_ary_onehot)
prediction = model.predict_classes(feature_ary_normalized)
print("Accuracy = ", evalution[1])
print("前10筆預測結果:", prediction[:10])

結果如下:

進一步分析,看幾張正確,幾張錯誤,可使用pandas的cross table

label_ary_reshaped = label_ary.reshape(n)
table = pd.crosstab(label_ary_reshaped, prediction, rownames=['label'], colnames=['predict'])
print(table)

結果如下:

由上表可知,預測正確的有258+64張,預測錯誤的有71+3張

如果想取得每一張圖預測的數值(即每個label值可能的機率)

predict_prob = model.predict(feature_ary_normalized)
print("第{}張貼圖每種標籤的預測機率: {}".format(i, predict_prob[i]))
...

上圖可知:
第3張貼圖預測結果是 [0.82102931, 0.17897071]
對應到當初設計的one-shot encoding,就是0的機率是82%, 1的機率是17%,所以predict_classes的結果為0

results matching ""

    No results matching ""