多标签分类 Keras 指标

Posted

技术标签:

【中文标题】多标签分类 Keras 指标【英文标题】:Multi-label classification Keras metrics 【发布时间】:2019-05-21 07:38:01 【问题描述】:

哪些指标更适合 Keras 中的多标签分类:accuracycategorical_accuracy?显然最后一个激活函数是sigmoid,在这种情况下损失函数是binary_crossentropy

【问题讨论】:

我不认为 'categorical_crossentropy' 适合多标签分类。 你说的是几节课? 有 18 个标签,而不是类,因为每个图像都有多个标签 请不要使用 categorical_accuracy 进行多标签分类,而是为您提供精度 【参考方案1】:

实际上,Keras 中没有名为 accuracy 的指标。当您在 Keras 中设置 metrics=['accuray'] 时,将根据使用的损失函数自动推断出正确的准确度指标。因此,由于您已使用 binary_crossentropy 作为损失函数,因此将选择 binary_accuracy 作为指标。

现在,在多标签分类任务中,您绝对应该选择 binary_accuracy 而不是 categorical_accuracy,因为类是相互独立的,并且每个类的预测应该独立于其他类的预测来考虑。

【讨论】:

我不认为binary_accuracy 很好,因为它会给你一种虚假的成就感。由于大多数标签将为零,如果您的模型预测大部分为零,那么您可以轻松地在binary_accuracy 上获得 95+% @AkshayLAradhya 在解释binary_accuracy 的结果时需要考虑这一点,尤其是在标签数量较多的情况下。但是,无论如何,在多标签分类任务中categorical_accuracy 不是一个有效的选择。 这是不是多类问题。查看 OP cmets @BoppityBop 我认为你让它太复杂了。通过多标签分类,我们指的是样本可能有零个、一个或多个标签(即在此上下文中也称为“类”)分配给它的问题。例如,图像中可能同时存在“狗”和“猫”的任务,因此模型应该预测“狗”和“猫”。如果只有“狗”,那么它应该只预测“狗”。 OP 评论中也明确说明了这一点:“有 18 个标签,而不是类,因为每个图像都有多个标签”。 “label”和“class”其实没有区别。 @BoppityBop 这取决于你想如何定义它们。在包含“狗”和“猫”的图像示例中,您可以说“此样本中同时存在狗和猫 ”或者您可以说“此样本可能是 用狗和猫标记”。因此,这种区别并没有告诉我们太多。而[分类]任务的定义很重要。您可以选择将“多标签分类”称为“多类分类”,将“多类分类”简称为“分类”。定义很重要。不过,我在回答中使用了通用定义。【参考方案2】:

我不会将 Accuracy 用于具有不平衡类的分类任务。 特别是对于多标签任务,您的大部分标签可能都是 False。也就是说,与所有可能标签的基数相比,每个数据点只能有一小部分标签。 出于这个原因,准确度不是一个好的指标,如果您的模型预测所有 False(sigmoid 激活输出

我会分析每个时期的 AUC 或召回率/精度。 或者,可以将多标签任务视为排名任务(如推荐系统),您可以评估precision@k 或recall@k,其中k 是预测最高的标签。

如果您的 Keras 后端是 TensorFlow,请在此处查看支持的指标的完整列表:https://www.tensorflow.org/api_docs/python/tf/keras/metrics。

【讨论】:

以上是关于多标签分类 Keras 指标的主要内容,如果未能解决你的问题,请参考以下文章

为多标签分类生成 sklearn 指标的问题

f-score:ValueError:分类指标无法处理多标签指标和连续多输出目标的混合

哪些损失函数和指标用于具有非常高的负数与正数比率的多标签分类?

Keras CNN:图像的多标签分类

如何使用 keras 实现多标签分类神经网络

如何使用keras进行多标签多类分类