2015-09-25 82 views
2

我有一個數據集,其中圖像有變化標籤數量。標籤的數量在1到5之間。共有100個類別。Caffe:具有不同標籤數量的多標籤圖像

谷歌搜索後,看起來像HDF5分貝層分貝可以處理多個標籤,如下面的URL

唯一的問題是它假設有一個固定數量的標籤。在此之後,我將不得不創造非標類一1×100矩陣,其中,項值爲1的標記類,0,如以下定義:

layers { 
    name: "slice0" 
    type: SLICE 
    bottom: "label" 
    top: "label_matrix" 
    slice_param { 
     slice_dim: 1 
     slice_point: 100 
    } 
} 

其中每個圖像包含AA標籤找像(1,0,0,... 1,... 0,...,0,1),其中矢量大小爲100維。

現在,我很抱歉,我的問題變得模糊,但這是一個可行的想法?也就是說,有更好的方法來解決這個問題嗎?

回答

2

我知道你有5種類型的標籤並不總是爲每個數據點。 5個標籤中的1個用於100路分類。正確到目前爲止?

我建議總是將所有5個標籤寫入HDF5,並在標籤丟失時使用特殊值。然後,您可以使用missing_value選項跳過爲該迭代計算該層的損失。使用它需要將loss_param{ ignore_label = Y }添加到網絡原型文件定義中的損失層,其中Y是標量。

反向傳播的錯誤只會是存在的標籤的函數。如果輸入X對標籤沒有有效值,網絡仍然會爲該標籤產生一個估計。但它不會因此而受到懲罰。產生輸出對於該迭代中權重如何更新沒有任何影響。只有非缺失標籤的輸出纔會產生錯誤信號和重量梯度。

似乎只有Accuracy和SoftmaxWithLossLayer圖層支持missing_values。

每個標籤都是1x5矩陣。第一個條目可以用於100路分類(例如[0-99]),條目2:5的標量可以反映其他標籤可以採用的值。列的順序對於數據集中的所有條目都是相同的。缺少的標籤由您選擇的特殊值標記。這個特殊值必須位於有效標籤值之外。這將取決於這些標籤所代表的內容。如果標籤值-1從不出現,則可以使用它來標記缺少的標籤。

+0

您是否建議每張圖片的標籤可寫爲[5,10,25,32,91]?關於PO的問題,我只知道將第5,10,25,32和91st的標籤向量寫爲100-dim向量的等價方法,其值爲'1',其餘爲'0'。你可以提供任何參考嗎?謝謝! – mintaka

+0

對不起,現在不認爲我有參考。您可以將標籤向量定義爲長二進制代碼,並使用sigmoidcrossentropy丟失圖層。這將允許標籤矢量中的兩個類同時打開,或者爲每個「類型」的標籤定義一個損失層。這樣你可以保持標量標籤的值,而不必將它們轉換成二進制向量並將它們連接起來。 – ypx