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

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

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

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

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

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


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








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

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




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

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

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