caffe 每個樣本對應多個label?
問題如下:
五分類問題樣本1: 2,3(樣本1屬於第二類和第三類)樣本2: 1,3,4(樣本2屬於第一類,第三類和第四類)
......這種問題在caffe框架下該怎麼做?還有想問一下,caffe支持one-hot label格式嗎?希望大神們能詳細指導一下。
1、把每個樣本的標籤保存成一個5-vector來輸入, 例如00111。
caffe 框架下用,1)使用HDF5Data做輸入,是最容易實現的。在一個.h5文件里存兩個數組就好。數組「data」是N*3*H*W, 數組「label」是N*5。2)用lmdb的話可以參考這裡sukritshankar/Caffe-LMDBCreation-MultiLabel3)自己寫custom layer的話,可參考做圖像分割的人是怎麼寫的,圖像分割里的label更複雜。https://github.com/shelhamer/fcn.berkeleyvision.org/blob/master/nyud_layers.py2、loss function 部分可以自己寫custom layer。可以考慮把Multinomial Logistic Loss 的分子由單項改為多項,也可以考慮在最後一步對每個樣本轉為二分類問題再算loss。
可以,比如有5類就輸出5x2的向量,對應屬於那一類的概率。這個不叫one hot,因為一個樣本可能有多個1。
已經通過 使用HDF5Data做輸入 ,加入slice layer,構建五個小分類器 解決了這個問題,效果也還可以。
!!!如果有小夥伴遇到了類似的問題,又無從下手的話,私信我,我把我的具體流程和代碼告訴你。
----------------------------------------------------------------------------------------------------
發現有很多小夥伴都遇到了這個問題。。。作此補充。
1.HDF5文件的生成
參考這篇博客:caffe HDF5Data 層使用及數據生成
2.網路結構
參考這篇博客:Caffe中HDF5Data例子 - from_jiarenyf - 博客頻道 - CSDN.NET
3.我的prototxt文件(已更新)
到此下載:
prototxtdownload.csdn.net-----------------------------------
基本框架,如下圖所示。
--------------------------------------------------------------------------------------------------------
- 我對這個問題並沒有很深入的研究,只知道這一種很簡單直接的辦法。
- 如果你無從下手的話,不妨先試一試這種方法。
- 關於機器學習數據挖掘神經網路方面的問題,歡迎相互交流學習。
Softmax在輸出結果的時候本來就是對每個分類的概率值,兩種方法,一種是自定義Layer,重新定義損失函數和分類層,另一種方式就是使用Softmax做分類,對分類中的概率矩陣做二次處理分析也可以。
一個建議:如果五個分類都是不相關的話,五分類,每個分類都作為一個二分類,0代表不屬於該類別,1代表屬於該類別,比如你說的樣本1屬於類別2/3,則對應的標籤應該是一個vector,01100,以此類推。
當然這個問題如果再想往下想的話,再考慮相關性問題,如果兩個類別比如類別1和4絕對不可能屬於同一數據的話,即存在互斥關係,可以再重新編碼,設置一個類別(比如6),0代表屬於1,1代表屬於4,這樣的話,就可以起到壓縮類別標籤的作用。當然如果不想這麼複雜的話,那就直接像上面說的5個二分類就行了。
caffe做多標籤分類,據我所知,有兩種方法,一種是改源碼,這個網上也有教程,但是沒有涉及到cu部分的源碼改寫,也就是說如果要用GPU的話,還得自己會改,這個方法比較複雜。還有一個簡單的辦法就是改寫網路結構,輸入有兩個:一個是圖像數據的lmdb,一個是標籤文件label的lmdb,輸出就是有幾個標籤類別就有幾個輸出blob,這個方法相對簡單。可以試試 image_data_layer自定義修改label長度或者內容
你好,我最近在做多標籤分類,能分享一下你的代碼嗎? 1164880194@qq.com 謝謝
推薦閱讀:
※CNN全連接層隱層結點數(output_dim)的設定有什麼講究嗎?
※Ubuntu這麼難安裝嗎?
TAG:深度學習DeepLearning | Caffe深度學習框架 |