函數(shù)說(shuō)明
在計(jì)算交叉熵之前踏揣,通常要用到softmax層來(lái)計(jì)算結(jié)果的概率分布萄涯。因?yàn)閟oftmax層并不會(huì)改變最終的分類結(jié)果(排序),所以坚芜,tensorflow將softmax層與交叉熵函數(shù)進(jìn)行封裝屉佳,形成一個(gè)函數(shù)方便計(jì)算:tf.nn.softmax_cross_entropy_with_logits(logits= , labels=)谷朝。
為了加速計(jì)算過(guò)程,針對(duì)只有一個(gè)正確答案(例如MNIST識(shí)別)的分類問(wèn)題武花,tensorflow提供了tf.nn.sparse_softmax_cross_entropy_with_logits(logits= , labels=)圆凰。
兩個(gè)函數(shù)的區(qū)別
兩個(gè)函數(shù)雖然功能類似,但是其參數(shù)labels有明顯區(qū)別体箕。tf.nn.softmax_cross_entropy_with_logits()中的logits和labels的shape都是[batch_size, num_classes]专钉,而tf.nn.sparse_softmax_cross_entropy_with_logits()中的labels是稀疏表示的,是 [0累铅,num_classes)中的一個(gè)數(shù)值跃须,代表正確分類結(jié)果。即sparse_softmax_cross_entropy_with_logits 直接用標(biāo)簽計(jì)算交叉熵娃兽,而 softmax_cross_entropy_with_logits 是標(biāo)簽的onehot向量參與計(jì)算菇民。softmax_cross_entropy_with_logits 的 labels 是 sparse_softmax_cross_entropy_with_logits 的 labels 的一個(gè)獨(dú)熱版本(one hot version)。
PS:交叉熵是的log是ln