?項(xiàng)目介紹
小狗分類器可以做什么裳涛?
通過(guò)這個(gè)分類器,你只需要上傳照片众辨,就可以得到小狗的品種端三,以及更多的信息。
這就是所謂的「機(jī)器學(xué)習(xí)」鹃彻,讓機(jī)器自己去“學(xué)習(xí)”郊闯。我們今天要做的這個(gè)分類任務(wù),是一個(gè)“監(jiān)督學(xué)習(xí)”的過(guò)程蛛株。
監(jiān)督學(xué)習(xí)的主要目標(biāo)是從有標(biāo)簽的訓(xùn)練數(shù)據(jù)中學(xué)習(xí)模型团赁,以便對(duì)未知或未來(lái)的數(shù)據(jù)做出預(yù)測(cè)。
我給大家講一個(gè)例子谨履。
用“房子的尺寸”預(yù)測(cè)“房子的價(jià)格”
X-房子的尺寸(小狗的圖片)
Y-房子的價(jià)格(小狗的類別)
如圖欢摄,我們根據(jù)已經(jīng)有的數(shù)據(jù)集(圖上的坐標(biāo)),可以擬合出一條近似符合規(guī)律的直線笋粟。
這樣怀挠,再有新的房子尺寸(1250),我們就可以估算出房子的價(jià)格(220k)了害捕。
有了這些簡(jiǎn)單的基礎(chǔ)绿淋,可以開(kāi)始搞了。
效果展示
訓(xùn)練集的準(zhǔn)確率為0.925尝盼,但測(cè)試集只有0.7
說(shuō)明過(guò)擬合了吞滞,可以再增加一些圖片,或者使用數(shù)據(jù)增強(qiáng)盾沫,來(lái)減少過(guò)擬合裁赠。
測(cè)試了兩張圖片,全都識(shí)別對(duì)了疮跑!
編寫(xiě)思路
整個(gè)分類器的實(shí)現(xiàn)组贺,可以分為以下幾個(gè)部分:
1 準(zhǔn)備數(shù)據(jù)集
我們可以通過(guò)爬蟲(chóng)技術(shù),把4類圖像(京巴祖娘、拉布拉多失尖、柯基、泰迪)保存到本地渐苏∠瞥保總共有840張圖片做訓(xùn)練集,188張圖片做測(cè)試集琼富。
數(shù)據(jù)集的準(zhǔn)備仪吧,可以參考上一篇文章,關(guān)注(GitPython)查看文章鞠眉。
2 數(shù)據(jù)集的預(yù)處理
1) 統(tǒng)一尺寸為100*100*3(RGB彩色圖像)
2) 由于數(shù)據(jù)是自己下載的薯鼠,需要制作標(biāo)簽(label)择诈,可提取圖像名稱的第一個(gè)數(shù)字作為類別。(重命名圖片)
3)劃分?jǐn)?shù)據(jù)集
840張圖片做訓(xùn)練集出皇,188張圖片做測(cè)試集羞芍。
4)把圖片轉(zhuǎn)換為網(wǎng)絡(luò)需要的類型
3 搭建卷積神經(jīng)網(wǎng)絡(luò)
Keras是基于TensorFlow的深度學(xué)習(xí)庫(kù),是由純Python編寫(xiě)而成的高層神經(jīng)網(wǎng)絡(luò)API郊艘,也僅支持Python開(kāi)發(fā)荷科。
它是為了支持快速實(shí)踐而對(duì)Tensorflow的再次封裝,讓我們可以不用關(guān)注過(guò)多的底層細(xì)節(jié)纱注,能夠把想法快速轉(zhuǎn)換為結(jié)果畏浆。
4 訓(xùn)練
訓(xùn)練的過(guò)程,就是最優(yōu)解的過(guò)程狞贱。
對(duì)上圖來(lái)說(shuō)刻获,就是根據(jù)數(shù)據(jù)集,不斷的迭代斥滤,找到一條最近似的直線(y = kx + b)将鸵,把參數(shù)k,b保存下來(lái)佑颇,預(yù)測(cè)的時(shí)候直接加載。
5 預(yù)測(cè)
此時(shí)k草娜、b(參數(shù))和x(小狗的圖像)都是已知的了挑胸,求k(類別)就完了。
# 1.上傳圖片
name = input('上傳圖片的名稱(例如:XX.jpg)為:')
# 2.預(yù)處理圖片(代碼省略)
# 3.加載權(quán)重文件
model.load_weights('dog_weights.h5')
# 4.預(yù)測(cè)類別
classes = model.predict_classes(x_test)[0]
target = ['京巴','拉布拉多','柯基','泰迪']
# 3-泰迪 2-柯基 1-拉布拉多 0-京巴
# 5.打印結(jié)果
print("識(shí)別結(jié)果為:"+ target[classes])
依賴環(huán)境
1 深度學(xué)習(xí)框架Keras和TensorFlow
2 PIL擴(kuò)展庫(kù)(預(yù)處理圖片)
3 Pycharm/Jupyter notebook
源碼
關(guān)注公眾號(hào)【GitPython】宰闰,回復(fù)【圖像識(shí)別】