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-MultiLabel

3)自己寫custom layer的話,可參考做圖像分割的人是怎麼寫的,圖像分割里的label更複雜。https://github.com/shelhamer/fcn.berkeleyvision.org/blob/master/nyud_layers.py

2、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深度學習框架 |