用于多类分类时 binary_crossentropy 损失的重要性?
Posted
技术标签:
【中文标题】用于多类分类时 binary_crossentropy 损失的重要性?【英文标题】:Significance of binary_crossentropy loss when used on for multiclass classification? 【发布时间】:2018-05-26 19:24:10 【问题描述】:您是否应该始终使用categorical_crossentropy
loss 来解决多类分类问题?还是binary_crossentropy
在某些方面也有意义?
需要明确的是,多类意味着输入可以采用多个类之一。问题是单一标签,这意味着输入不能同时包含多个类。
【问题讨论】:
【参考方案1】:K.binary_crossentropy
对于多类 分类没有意义,它适用于二元多标签 分类。 This post 详细概述了差异。请记住,在后台*:
K.binary_crossentropy
是 tf.nn.sigmoid_cross_entropy_with_logits
K.categorical_crossentropy
是 tf.nn.softmax_cross_entropy_with_logits
* 假设您使用的是 tensorflow 后端
【讨论】:
谢谢。这是否意味着 binary_crossentropy 的最后一层应始终使用 sigmoid 激活,而 categorical_crossentropy 应始终使用 softmax 激活?另外 - 由于 binary_crossentropy 是多标签,这是否意味着在最后一层之后输出的概率不必总和为 1?binary_crossentropy
本身执行 sigmoid 激活,这就是为什么 tensorflow 函数被命名为 with logits。额外的 sigmoid 层只会造成伤害。 categorical_crossentropy
也是如此。是的,概率是每个特征的,不必总和为 1。
你确定吗?我见过的几乎所有使用 categorical_crossentropy 损失的例子都有一个 softmax 作为最后一层。
糟糕,我的错。在 Keras 中,默认值为 from_logits=False
,在这种情况下,它期望输入作为概率。但要明确一点:通过这种方式计算 sigmoid 输出,然后将其转换回 logits,然后应用 sigmoid_cross_entropy_with_logits
,它会再计算一次 sigmoid。查看源代码。我主要是直接在 tensorflow 中完成,所以我自己从不使用 sigmoid/softmax 层。以上是关于用于多类分类时 binary_crossentropy 损失的重要性?的主要内容,如果未能解决你的问题,请参考以下文章
用于多类分类的 SVM(one-vs-all)中的置信度估计