基于Keras的多標(biāo)簽圖像分類

向AI轉(zhuǎn)型的程序員都關(guān)注了這個(gè)號(hào)??????
機(jī)器學(xué)習(xí)AI算法工程 公眾號(hào):datayx
本篇記錄一下自己項(xiàng)目中用到的keras相關(guān)的部分。由于本項(xiàng)目既有涉及multi-class(多類分類),也有涉及multi-label(多標(biāo)記分類)的部分,multi-class分類網(wǎng)上已經(jīng)很多相關(guān)的文章了。這里就說一說multi-label的搭建網(wǎng)絡(luò)的部分。之后如果有時(shí)間的時(shí)候,再說一說cross validation(交叉驗(yàn)證)和在epoch的callback函數(shù)中處理一些多標(biāo)簽度量metric的問題。
multi-label多標(biāo)記監(jiān)督學(xué)習(xí)
其實(shí)我個(gè)人比較喜歡把label翻譯為標(biāo)簽。那可能學(xué)術(shù)上翻譯multi-label多翻譯為多標(biāo)記。其實(shí)和多標(biāo)簽一個(gè)意思。
multi-class 和 multi-label的區(qū)別
multi-class是相對(duì)于binary二分類來說的,意思是需要分類的東西不止有兩個(gè)類別,可能是3個(gè)類別取一個(gè)(如iris分類),或者是10個(gè)類別取一個(gè)(如手寫數(shù)字識(shí)別mnist)。
而multi-label是更加general的一種情況了,它說為什么一個(gè)sample的標(biāo)簽只能有1個(gè)呢。為什么一張圖片不是貓就是狗呢?難道我不能訓(xùn)練一個(gè)人工智能,它能告訴我這張圖片既有貓又有狗呢?
其實(shí)關(guān)于多標(biāo)簽學(xué)習(xí)的研究,已經(jīng)有很多成果了。
主要解法是
* 不擴(kuò)展基礎(chǔ)分類器的本來算法,只通過轉(zhuǎn)換原始問題來解決多標(biāo)簽問題。如BR, LP等。
* 擴(kuò)展基礎(chǔ)分類器的本來算法來適配多標(biāo)簽問題。如ML-kNN, BP-MLL等。
這里不展開了。有興趣的同學(xué)可以自己去研究一下。
keras的multi-label
廢話不多說,直接上代碼。

稍微解說一下:
* 整個(gè)網(wǎng)絡(luò)是fully connected全連接網(wǎng)絡(luò)。
* 網(wǎng)絡(luò)結(jié)構(gòu)是輸入層=你的特征的維度
* 隱藏層是500*100,激勵(lì)函數(shù)都是relu。隱藏層的節(jié)點(diǎn)數(shù)量和深度請(qǐng)根據(jù)自己的數(shù)量來自行調(diào)整,這里只是舉例。
* 輸出層是你的label的維度。使用sigmoid作為激勵(lì),使輸出值介于0-1之間。
* 訓(xùn)練數(shù)據(jù)的label請(qǐng)用0和1的向量來表示。0代表這條數(shù)據(jù)沒有這個(gè)位的label,1代表這條數(shù)據(jù)有這個(gè)位的label。假設(shè)3個(gè)label的向量[天空,人,大海]的向量值是[1,1,0]的編碼的意思是這張圖片有天空,有人,但是沒有大海。
* 使用binary_crossentropy來進(jìn)行損失函數(shù)的評(píng)價(jià),從而在訓(xùn)練過程中不斷降低交叉商。實(shí)際變相的使1的label的節(jié)點(diǎn)的輸出值更靠近1,0的label的節(jié)點(diǎn)的輸出值更靠近0。
有了這個(gè)結(jié)構(gòu),就可以run起來一個(gè)multi label的神經(jīng)網(wǎng)絡(luò)了。這個(gè)只是基礎(chǔ)中的基礎(chǔ),關(guān)于multi-label的度量代碼才是我們研究一個(gè)機(jī)器學(xué)習(xí)問題的核心。
1. 多標(biāo)簽圖像數(shù)據(jù)集

項(xiàng)目代碼和數(shù)據(jù)集 獲取方式:
關(guān)注微信公眾號(hào) datayx 然后回復(fù) 多標(biāo)簽分類 即可獲取。
AI項(xiàng)目體驗(yàn)地址 https://loveai.tech
2. 多標(biāo)簽分類項(xiàng)目結(jié)構(gòu)
3. 基于 Keras 建立的網(wǎng)絡(luò)結(jié)構(gòu)

接著開始定義網(wǎng)絡(luò)模型–SmallerVGGNet 類,它包含 build 方法用于建立網(wǎng)絡(luò),接收 5 個(gè)參數(shù),width, height, depth 就是圖片的寬、高和通道數(shù)量,然后 classes 是數(shù)據(jù)集的類別數(shù)量,最后一個(gè)參數(shù) finalAct 表示輸出層的激活函數(shù),注意一般的圖像分類采用的是 softmax 激活函數(shù),但是多標(biāo)簽圖像分類需要采用 sigmoid 。

接著,就開始建立網(wǎng)絡(luò)模型了,總共是 5 層的卷積層,最后加上一個(gè)全連接層和輸出層,其中卷積層部分可以說是分為三個(gè)部分,每一部分都是基礎(chǔ)的卷積層、RELU 層、BatchNormalization 層,最后是一個(gè)最大池化層(MaxPoolingLayer)以及 Dropout 層。


4. 實(shí)現(xiàn)網(wǎng)絡(luò)模型以及訓(xùn)練








在訓(xùn)練結(jié)束后,訓(xùn)練集和測(cè)試集上的準(zhǔn)確率分別是 98.57% 和 98.42 ,繪制的訓(xùn)練損失和準(zhǔn)確率折線圖圖如下所示,上方是訓(xùn)練集和測(cè)試集的準(zhǔn)確率變化曲線,下方則是訓(xùn)練集和測(cè)試集的損失圖,從這看出,訓(xùn)練的網(wǎng)絡(luò)模型并沒有遭遇明顯的過擬合或者欠擬合問題。

5. 測(cè)試網(wǎng)絡(luò)模型




其他的樣例圖片都可以通過相同的命令,只需要修改輸入圖片的名字即可,然后就是其中最后一張圖片,是比較特殊的,輸入命令如下所示:

展示的結(jié)果,這是一條黑色連衣裙,但預(yù)測(cè)結(jié)果給出黑色牛仔褲的結(jié)果。

6. 小結(jié)
原文地址
https://www.pyimagesearch.com/2018/05/07/multi-label-classification-with-keras/
機(jī)器學(xué)習(xí)算法AI大數(shù)據(jù)技術(shù)
搜索公眾號(hào)添加: datanlp
長按圖片,識(shí)別二維碼
閱讀過本文的人還看了以下文章:
TensorFlow 2.0深度學(xué)習(xí)案例實(shí)戰(zhàn)
基于40萬表格數(shù)據(jù)集TableBank,用MaskRCNN做表格檢測(cè)
《基于深度學(xué)習(xí)的自然語言處理》中/英PDF
Deep Learning 中文版初版-周志華團(tuán)隊(duì)
【全套視頻課】最全的目標(biāo)檢測(cè)算法系列講解,通俗易懂!
《美團(tuán)機(jī)器學(xué)習(xí)實(shí)踐》_美團(tuán)算法團(tuán)隊(duì).pdf
《深度學(xué)習(xí)入門:基于Python的理論與實(shí)現(xiàn)》高清中文PDF+源碼
python就業(yè)班學(xué)習(xí)視頻,從入門到實(shí)戰(zhàn)項(xiàng)目
2019最新《PyTorch自然語言處理》英、中文版PDF+源碼
《21個(gè)項(xiàng)目玩轉(zhuǎn)深度學(xué)習(xí):基于TensorFlow的實(shí)踐詳解》完整版PDF+附書代碼
《深度學(xué)習(xí)之pytorch》pdf+附書源碼
PyTorch深度學(xué)習(xí)快速實(shí)戰(zhàn)入門《pytorch-handbook》
【下載】豆瓣評(píng)分8.1,《機(jī)器學(xué)習(xí)實(shí)戰(zhàn):基于Scikit-Learn和TensorFlow》
《Python數(shù)據(jù)分析與挖掘?qū)崙?zhàn)》PDF+完整源碼
汽車行業(yè)完整知識(shí)圖譜項(xiàng)目實(shí)戰(zhàn)視頻(全23課)
李沐大神開源《動(dòng)手學(xué)深度學(xué)習(xí)》,加州伯克利深度學(xué)習(xí)(2019春)教材
筆記、代碼清晰易懂!李航《統(tǒng)計(jì)學(xué)習(xí)方法》最新資源全套!
《神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)》最新2018版中英PDF+源碼
將機(jī)器學(xué)習(xí)模型部署為REST API
FashionAI服裝屬性標(biāo)簽圖像識(shí)別Top1-5方案分享
重要開源!CNN-RNN-CTC 實(shí)現(xiàn)手寫漢字識(shí)別
同樣是機(jī)器學(xué)習(xí)算法工程師,你的面試為什么過不了?
前海征信大數(shù)據(jù)算法:風(fēng)險(xiǎn)概率預(yù)測(cè)
【Keras】完整實(shí)現(xiàn)‘交通標(biāo)志’分類、‘票據(jù)’分類兩個(gè)項(xiàng)目,讓你掌握深度學(xué)習(xí)圖像分類
VGG16遷移學(xué)習(xí),實(shí)現(xiàn)醫(yī)學(xué)圖像識(shí)別分類工程項(xiàng)目
特征工程(二) :文本數(shù)據(jù)的展開、過濾和分塊
如何利用全新的決策樹集成級(jí)聯(lián)結(jié)構(gòu)gcForest做特征工程并打分?
Machine Learning Yearning 中文翻譯稿
全球AI挑戰(zhàn)-場(chǎng)景分類的比賽源碼(多模型融合)
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)
python+flask搭建CNN在線識(shí)別手寫中文網(wǎng)站
中科院Kaggle全球文本匹配競(jìng)賽華人第1名團(tuán)隊(duì)-深度學(xué)習(xí)與特征工程
不斷更新資源
深度學(xué)習(xí)、機(jī)器學(xué)習(xí)、數(shù)據(jù)分析、python
搜索公眾號(hào)添加: datayx
