藉着上一篇對sigmoid的理解,將sotfmax替換成sigmoid便可!區別在於sotfmax解決的是多分類問題。git
先來看幾個重要的關鍵點:數組
一、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是裏面最小的,能取到的機率也是最小的。函數
二、假設上面一組數據是貓的特徵,如今又有一組數據[8.0, 9.2, 7.6, 6.0],這個是狗的特徵數據,經過sotfmax計算的結果是[0.19509259 0.64773005 0.13077445 0.02640291],在這裏對比貓的特徵數據結果,貓的是第三位數0.6477的機率最大,狗的是第二位0.6477最大,這樣的話咱們能夠區別兩個動物了。再給一組數據,若是計算結果是第二位數最大,那咱們就能夠判斷它是狗,第三位數最大的話就判斷是貓,若是是第一位呢或最後一位?那就是劃爲另外一個新動物了,這個數組有四個數,就能夠進行四個分類。分類是否準確先不說,至少能夠區別。spa
三、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,由於它們都表明的是機率,要相互比較。it
四、如今分四類,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表示。tensorflow