Day 29 ~ AI从入门到放弃 - 猫狗辨识之四

训练过程中可能会有关於图片的错误讯息出现,不过并不是所有图片都有问题,小部分的错误可以忽略。
如果出现的是缺少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)

<<:  Day25 - 区块链的「硬分岔」史

>>:  python30天-DAY29-Matplotlib(4)

[DAY 26]随机组队功能

公会成员平均在线成员人数有90位,但实际在discord频道活跃人数不到20位 为了让非活跃在线人数...

[Day 7]想不到有梗的标题LA(前端篇)

没有想到连假结束後的第一天就要冨樫了...,我工作的公司在新加坡,而我在台湾full remote,...

鬼故事 - 我的密码是...

[鬼故事] - 我的密码是... Credit: 一级玩家 如果有人把密码这样写在座位上,请小心这些...

Day 10 - Valid Sudoku

大家好,我是毛毛。ヾ(´∀ ˋ)ノ 废话不多说开始今天的解题Day~ tags: 2021_iTho...

管理职不是屎缺,但也不好做

相信这个问题做了几年工程师之後,应该多少都有想过一两次吧? 在管理职当然做的事情,就会从面对事情而转...