在 keras 模型指标中使用简单的“准确性”进行多类分类在技术上是错误的吗?我们应该使用 CategoricalAccuracy() 吗?

Posted

技术标签:

【中文标题】在 keras 模型指标中使用简单的“准确性”进行多类分类在技术上是错误的吗?我们应该使用 CategoricalAccuracy() 吗?【英文标题】:Is it technically wrong to use simple "accuracy" in keras model metrics for multi-class classification? Should we use CategoricalAccuracy()? 【发布时间】:2021-02-11 04:29:32 【问题描述】:

因此,根据 Keras 的定义,简单的“准确度”指标比较 2 个标记的类是正确的。 代码sn-p

        ---------some model layers---------.
        model.add(Dense(len(all_labels), name="output", activation = 'softmax'))
        METRICS = ['accuracy', tf.keras.metrics.CategoricalAccuracy() , tf.keras.metrics.AUC(), 'mae']
        model.compile(optimizer = 'adam', loss = 'binary_crossentropy',
                           metrics = METRICS)

我正在尝试解决多类图像识别问题(7类,互斥)(一个数据点只属于一个类),使用one-hot编码和Output Softmax Activation用于Multi-class(是这是正确的还是我应该选择 Sigmoid?)。 损失函数是二元交叉熵(分类交叉熵用于多标签相互包容)。 那么这里适用的准确度指标是什么? 'accuracy' 还是 categoricalAccuracy()?

示例输出--> 显示“准确度”很高,但 categoricalAccuracy 很差

Epoch 1/10
 99/100 [============================>.] - ETA: 4s - loss: 0.5722 - acc: 0.8334 - categorical_accuracy: 0.1504 - auc_2: 0.5117 - mean_absolute_error: 0.2434

如果这个模型在分类准确率方面很差,如何让它变得更好?

【问题讨论】:

【参考方案1】:

您应该使用 CategoricalAccuracy。它适用于 one-hot 标签和类的预测 logits。

我认为您应该使用 CategoricalCrossentropy 作为损失函数。当你有两个类时使用 BinaryCrossentropy。

【讨论】:

以上是关于在 keras 模型指标中使用简单的“准确性”进行多类分类在技术上是错误的吗?我们应该使用 CategoricalAccuracy() 吗?的主要内容,如果未能解决你的问题,请参考以下文章

从 history.history Keras 序列中绘制模型损失和模型准确性

Sklearn 指标值与 Keras 值非常不同

使用 Keras 进行深度学习 - 训练时没有学习率

在 Keras 模型中优化准确性而不是损失

如何使用 GPU 构建 Keras (TF) 模型?

即使使用相同的数据,Keras 训练和验证指标值也不同(逻辑回归)