sotfmax的通俗理解
借著上一篇對sigmoid的理解,將sotfmax替換成sigmoid即可!區別在於sotfmax解決的是多分類問題。
先來看幾個重要的關鍵點:
1、sotfmax 是在一堆數值裏面取最大數的概率。如tf.nn.softmax([1.0, 3.0, 4.2, 2.6]),返回的結果是[0.02640291 0.19509259 0.64773005 0.13077445]。意思是在這個數組裏,取到4.2的概率是0.6477。1.0是裏面最小的,能取到的概率也是最小的。
2、假設上面一組數據是貓的特征,現在又有一組數據[8.0, 9.2, 7.6, 6.0],這個是狗的特征數據,通過sotfmax計算的結果是[0.19509259 0.64773005
3、tensorflow裏有個函數tf.nn.sotfmax_cross_entropy_with_logits(logits=logit,labels=label)。logits是上面的特征數據[1.0, 3.0, 4.2, 2.6] , 那labels就是真實的分類,是貓就可以表示為[0,0,1,0],狗就是[0,1,0,0]。第二個位置是1,表示是狗,第三個位置是1,表示是貓。tf.nn.sotfmax_cross_entropy_with_logits函數先將特征進行sotfmax運算,再和label做交叉熵運算,得到的結果就是它們的差異值。logits與labels必須是相同的shape,因為它們都代表的是概率,要相互比較。
4、現在分四類,labels就是一組四個元素的數組,但是我的樣本數據裏包括很多項內容,如有毛發,牙齒,眼睛,身高,體重這五項特征,logits與lables的shape又要一樣,怎麽辦?還記得上一篇的sigmoid中有涉及到一個線性方程 F = W*X +B 嗎?,這時W就起作用了,假設有10個樣本,X是一個10*5的數組[ [a0,b0,c0,d0,e0],[a1,b1,c1,d1,e1],......[a9,b9,c9,d9,e9]],此時,我們定義W為一個5*4的矩陣,W*B的結果就是一個10*4的矩陣的。lalels也是一個10*4的矩陣,[[0,0,1,0],[0,1,0,0],......]。註意,每個[0,1,0,0]這樣的數組裏面的數加起來必須為1,因為它代表的是概率,也可以表示為[0.1,0.2,0.6,0.1],但是這個labels是我們知道的真實標簽,這個百分之百就是貓,所以[0,0,1,0]的第三位直接用1表示。
sotfmax的通俗理解