Tensorflow,tf.nn.softmax_cross_entropy_with_logits和tf.nn.sparse_softmax_cross_entropy_with_logits之间的区别

4
我已阅读两个函数的文档,但据我所知,对于函数tf.nn.softmax_cross_entropy_with_logits(logits, labels, dim=-1, name=None),结果是交叉熵损失,其中logitslabels的维度相同。
然而,对于函数tf.nn.sparse_softmax_cross_entropy_with_logitslogitslabels的维度不同?
您能否给出一个更详细的tf.nn.sparse_softmax_cross_entropy_with_logits示例?
1个回答

5
区别在于tf.nn.softmax_cross_entropy_with_logits不假设类别是相互排斥的:
衡量离散分类任务中的概率误差,其中每个类都是独立的且不相互排斥。例如,可以执行多标签分类,其中一张图片可以同时包含大象和狗。
sparse_*进行比较:
度量离散分类任务中的概率误差,其中类别是相互排斥的(每个条目恰好属于一个类)。例如,每个CIFAR-10图像都标有一个且仅一个标签:一张图片可以是狗或卡车,但不能都是。
因此,使用稀疏函数时,logitslabels的维数不同:labels每个示例包含一个数字,而logits每个示例包含类的数量,表示概率。

至少在最新版本的TensorFlow 1.2中,softmax_cross_entropy_with_logits的上述描述不再准确:“...其中类别是相互排斥的(每个条目仅属于一个类别)...” https://www.tensorflow.org/api_docs/python/tf/nn/softmax_cross_entropy_with_logits - user2725109

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接