iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0

前言

訓練好模型之後,就可以進行推論了!推論(Inference)指的是模型訓練完畢後,將資料集輸入訓練好的模型,去預測結果。使用的資料是新的、沒看過的資料,所以通常會準備一份測試資料集,來測試訓練好的模型效果好不好。

測試資料要找和主題相同類型的,例如不會拿音訊檔案輸入影像分類模型去進行推論,也不會拿不是需求的檔案去測試,例如做的是熊熊分類器,偏要拿花卉或是其他動物的影像當作測試輸入(雖然它還是會告訴你一個答案啦XD)。

同時注意如果有在資料前處理時做過標準化或是正規化,要記得以同樣的標準去處理測試資料,而不是測試資料自己重算一份數值(如平均數和標準差)去計算。

如何推論?

  1. 載入訓練好的模型檔,your_model_name 換成自己的模型檔名:
from keras.models import load_model

saved_model = load_model("your_model_name.h5")
  1. 輸入要測試的影像檔案,your_path_to_image 換成要測試的檔案路徑,記得包含副檔名:
img_path = "your_path_to_image"
  1. 載入影像:
from tensorflow.keras.preprocessing import image

img = image.load_img(img_path, target_size=(256, 256))
  1. 影像轉換成 NumPy 數據形式,並增加一個維度,符合模型輸入期望格式:
img_array = image.img_to_array(img)
img_array = np.expand_dims(img_array, axis=0)
  1. 進行推論,使用 model.predict()
predictions = model.predict(img_array)
  1. 取得推論結果,找出最大值的索引,即表示機率值最高的類別,就是這張影像的推論結果:
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"

如果路徑字串有接上其他路徑字串,要記得檢查斜線格式是否統一,才不會出錯喔!

今天先以單張影像為例,明天會介紹評估測試結果,就會使用更多影像來進行推論~/images/emoticon/emoticon61.gif


上一篇
[Day 20] 訓練結果可視化
下一篇
[Day 22] 評估模型測試結果
系列文
輕鬆上手AI專案-影像分類到部署模型30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言