softmax_cross_entropy_with_logits与sparse_softmax_cross_entropy_with_logits的区别

读源码时发现softmax交叉熵损失函数的logits是(N,2),但是labels却是(N,1)的,仔细一看原来用的是sparse_softmax_cross_entropy_with_logits,看了一下文档,补充了基础知识

举例来说:
某个关于图像的单类别分类任务中,类别共有5种,
构造标签时往往会用[0,1,0,0,0],[0,0,0,1,0]这种one hot的形式,这种情况下使用tf.softmax_cross_entropy_with_logits()
如果构造标签时使用索引来表示类别,如第2类用[1],第4类用[3],这时就得用tf.sparse_softmax_cross_entropy_with_logits()了. 五种类别,索引的取值范围是:{0,1,2,3,4}

总结

二者的不同在于标签形式的不同,
tf.softmax_cross_entropy_with_logits()使用[0,1,0,0,0],[0,0,0,1,0]形式的标签;
同样的标签在tf.sparse_softmax_cross_entropy_with_logits()表示成[1],[3]

0%