iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 29
0
AI & Data

AI從入門到放棄系列 第 29

Day 29 ~ AI從入門到放棄 - 貓狗辨識之四

  • 分享至 

  • xImage
  •  

訓練過程中可能會有關於圖片的錯誤訊息出現,不過並不是所有圖片都有問題,小部分的錯誤可以忽略。
如果出現的是缺少PIL的話,請安裝套件。

pip install pillow

如果出現的錯誤是OOM的話,代表你的視訊記憶體容量不足以滿足目前的設定,請適度調低圖片輸入的尺寸,或是小批量梯度下降的批大小。

input_shape = (160, 160)
batch_size = 32

接著我們對於昨天訓練的模型挑選來做測試,這裡我使用其自動儲存的EfficientNetB0-40.h5,在驗證集的正確率到達95.16%,先寫一個函數,載入模型,對輸入圖片縮放、預處理再進行辨識,接著到Google上搜尋一些貓狗的圖片,丟進模型看是否辨識成功。

from tensorflow.keras.preprocessing.image import load_img, img_to_array
from tensorflow.keras.models import load_model

model = load_model('EfficientNetB0-40.h5')
input_shape = model.input_shape[1:3]

def predict(path, thresh=0.5):
  img = load_img(path, target_size=input_shape, interpolation='lanczos')
  img = img_to_array(img) / 255.
  conf = model.predict(img.reshape(-1, *img.shape))[0][0]
  animal = 'Cat' if conf < thresh else 'Dog'
  return (animal, conf)

越靠近0、1代表模型越有信心,越靠近0.5代表越沒有信心,我抓了四張圖片,來看看結果如何。
https://ithelp.ithome.com.tw/upload/images/20200924/20129770b7Xt6OMmoK.jpg
https://ithelp.ithome.com.tw/upload/images/20200924/20129770uTGlptOhAQ.jpg
https://ithelp.ithome.com.tw/upload/images/20200924/20129770DqegloVTSm.jpg
https://ithelp.ithome.com.tw/upload/images/20200924/20129770BaAByFxbIu.jpg

>>> predict(r'cat1.jpg')
('Cat', 0.44871056)
>>> predict(r'cat2.jpg')
('Cat', 0.15131222)
>>> predict(r'dog1.jpg')
('Dog', 0.7994051)
>>> predict(r'dog2.jpg')
('Dog', 0.99938977)

如果你對這個模型滿意,想要保留之後使用的話,可以這樣設定儲存參數,那麼優化器的狀態不會被保存下來,可以節省不少體積,減少的體積量依使用優化器的不同而定,使用adam的話,這麼做是很有感的,如果你是之前中斷訓練,且有意後續載入繼續進行訓練的話,建議可以先不做。

model.save('EfficientNetB0-40-Stripped.h5', include_optimizer=False)

上一篇
Day 28 ~ AI從入門到放棄 - 貓狗辨識之三
下一篇
Day 30 ~ AI從入門到放棄 - 結語
系列文
AI從入門到放棄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言