1. 程式人生 > >sotfmax的通俗理解

sotfmax的通俗理解

一位 假設 1.0 分類問題 概率 重要 max 最大 得到

借著上一篇對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

0.13077445 0.02640291],在這裏對比貓的特征數據結果,貓的是第三位數0.6477的概率最大,狗的是第二位0.6477最大,這樣的話我們可以區別兩個動物了。再給一組數據,如果計算結果是第二位數最大,那我們就可以判斷它是狗,第三位數最大的話就判斷是貓,如果是第一位呢或最後一位?那就是劃為另一個新動物了,這個數組有四個數,就可以進行四個分類。分類是否準確先不說,至少可以區別。

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的通俗理解