Multi label 多標簽分類問題(Pytorch,TensorFlow,Caffe)


適用場景:一個輸入對應多個label,或輸入類別間不互斥

調用函數:

1. Pytorch使用torch.nn.BCEloss

2. Tensorflow使用tf.losses.sigmoid_cross_entropy

3. Caffe使用SigmoidCrossEntropyLoss

在output和target之間構建binary cross entropy,其中i為每一個類。

 

以pytorch為例:Caffe,TensorFlow版本類比,輸入均為相同形式的向量

m = nn.Sigmoid()
loss = nn.BCELoss()
input = autograd.Variable(torch.randn(3), requires_grad=True)
target = autograd.Variable(torch.FloatTensor(3).random_(2))
output = loss(m(input), target)
output.backward()

注意target的形式,要寫成01編碼形式,eg:如果同時為第一類和第三類則,[1, 0, 1]

主要是結合sigmoid來使用,經過classifier分類過后的輸出為(batch_size,num_class)為每個數據的標簽, 標簽不是one-hot的主要體現在sigmoid輸出之后,仍然為(batch_size,num_class),對於一個實例,它的各個label的分數加起來不一定等於1,bceloss在每個類維度上求cross entropy loss然后加和求平均得到,這里就體現了多標簽的思想。

[CVPR2015] Is object localization for free? – Weakly-supervised learning with convolutional neural networks這篇論文里設計了針對多標簽問題的loss,傳統的類別分類不適用,作者把這個任務視為多個二分類問題,loss function和分類的分數如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM