如何用softmax和sigmoid來做多分類和多標簽分類


首先,說下多類分類和多標簽分類的區別

多標簽分類:一個樣本可以屬於多個類別(或標簽),不同類之間是有關聯的,比如一個文本被被划分成“人物”和“體育人物”兩個標簽。很顯然這兩個標簽不是互斥的,而是有關聯的;

多類分類:一個樣本屬於且只屬於多個分類中的一個,一個樣本只能屬於一個類,不同類之間是互斥的,比如一個文本只能被划分成“人物”,或者被划分成“文化”,而不能同時被划分成“人物”和“文化”,“文化”和“人物”這兩個分類就是互斥的

那么,如何用softmax和sigmoid來做多類分類和多標簽分類呢?

1.如何用softmax做多分類和多標簽分類       

現假設,神經網絡模型最后的輸出是這樣一個向量logits=[1,2,3,4], 就是神經網絡最終的全連接的輸出。這里假設總共有4個分類
用softmax做多分類的方法:tf.argmax(tf.softmax(logits))

      首先用softmax將logits轉換成一個概率分布,然后取概率值最大的作為樣本的分類這樣看似乎,tf.argmax(logits)同樣可以取得最大的值,也能得到正確的樣本分類,這樣的話softmax似乎作用不大  那么softmax的主要作用其實是在計算交叉熵上,首先樣本集中y是一個one-hot向量,如果直接將模型輸出logits和y來計算交叉熵,因為logits=[1,2,3,4],計算出來的交叉熵肯定很大,這種計算方式不對,而應該將logits轉換成一個概率分布后再來計算,就是用tf.softmax(logits)和y來計算交叉熵,當然我們也可以直接用tensorflow提供的方法sofmax_cross_entropy_with_logits來計算這個方法傳入的參數可以直接是logits,因為這個根據方法的名字可以看到,方法內部會將參數用softmax進行處理現在我們取的概率分布中最大的作為最終的分類結果,這是多分類我們也可以取概率的top幾個,作為最終的多個標簽,或者設置一個閾值,並取大於概率閾值的。這就用softmax實現了多標簽分類 

2.如何用sigmoid做多標簽分類

sigmoid一般不用來做多類分類,而是用來做二分類的; 它是將一個標量數字轉換到[0,1]之間,如果大於一個概率閾值(一般是0.5),則認為屬於某個類別,否則不屬於某個類別。

那么如何用sigmoid來做多標簽分類呢?

其實就是針對logits中每個分類計算的結果分別作用一個sigmoid分類器,分別判定樣本是否屬於某個類別。同樣假設,神經網絡模型最后的輸出是這樣一個向量logits=[1,2,3,4], 就是神經網絡最終的全連接的輸出。這里假設總共有4個分類 tf.sigmoid(logits)sigmoid應該會將logits中每個數字都變成[0,1]之間的概率值,假設結果為[0.01, 0.05, 0.4, 0.6],然后設置一個概率閾值,比如0.3,如果概率值大於0.3,則判定類別符合,那這里,樣本會被判定為類別3和類別4都符合。

 

參考文獻:

【1】如何用softmax和sigmoid來做多類分類和多標簽分類


免責聲明!

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



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