訓練好模型之後,就可以進行推論了!推論(Inference)指的是模型訓練完畢後,將資料集輸入訓練好的模型,去預測結果。使用的資料是新的、沒看過的資料,所以通常會準備一份測試資料集,來測試訓練好的模型效果好不好。
測試資料要找和主題相同類型的,例如不會拿音訊檔案輸入影像分類模型去進行推論,也不會拿不是需求的檔案去測試,例如做的是熊熊分類器,偏要拿花卉或是其他動物的影像當作測試輸入(雖然它還是會告訴你一個答案啦XD)。
同時注意如果有在資料前處理時做過標準化或是正規化,要記得以同樣的標準去處理測試資料,而不是測試資料自己重算一份數值(如平均數和標準差)去計算。
from keras.models import load_model
saved_model = load_model("your_model_name.h5")
img_path = "your_path_to_image"
from tensorflow.keras.preprocessing import image
img = image.load_img(img_path, target_size=(256, 256))
img_array = image.img_to_array(img)
img_array = np.expand_dims(img_array, axis=0)
model.predict()
:predictions = model.predict(img_array)
predicted_index = np.argmax(predictions, axis=1)[0]
print(predicted_index)
推論結果為 1。
說明:訓練模型時,類別編號以資料夾名稱排序,熊熊資料集依序為 black、grizzly、panda、polar 和 teddy(依照英文字母排序),拿棕熊的影像去測試,得到 1 表示類別為 grizzly,也表示推論正確。
如果要顯示對應類別與機率值:
class_names = ['black', 'grizzly', 'panda', 'polar', 'teddy']
predicted_index = np.argmax(predictions, axis=1)[0]
predicted_class_name = class_names[predicted_index]
predicted_probability = predictions[0][predicted_index]
print(f"Class: {predicted_class_name}")
print(f"Confidence: {predicted_probability:.4f}") # 取小數點後四位
執行結果:
Class: grizzly
Confidence: 1.0000
在 Windows 系統中,直接複製路徑到 Python 程式碼,需要將反斜線更換成正斜線,這樣才不會被當作跳脫字元處理。除了一一將反斜線刪除更改為正斜線之外:
img_path = "C:/test_dataset/image.png"
也可以變成兩個反斜線處理:
img_path = "C:\\test_dataset\\image.png"
或是可以在路徑前面加上 r
定義為原始字串,後面就直接貼上從檔案複製的路徑:
img_path = r"C:\test_dataset\image.png"
如果路徑字串有接上其他路徑字串,要記得檢查斜線格式是否統一,才不會出錯喔!
今天先以單張影像為例,明天會介紹評估測試結果,就會使用更多影像來進行推論~