python - 对于负数与正数比率非常高的多标签分类,应使用哪些损失函数和指标?

标签 python machine-learning keras multilabel-classification vgg-net

我正在训练一个多标签分类模型来检测衣服的属性。我在 Keras 中使用迁移学习,重新训练 vgg-19 模型的最后几层。

属性总数为 1000 个,其中约 99% 为 0。准确性、精确度、召回率等指标都失败了,因为模型可以预测全零,但仍然获得非常高的分数。二元交叉熵、汉明损失等,在损失函数的情况下都不起作用。

我正在使用深度时尚数据集。

那么,我可以使用哪些指标和损失函数来正确衡量我的模型?

最佳答案

哈桑的建议是不正确的 - 分类交叉熵损失或 Softmax 损失是 Softmax 激活加上交​​叉熵损失。如果我们使用此损失,我们将训练 CNN 输出每个图像的 C 类的概率。它用于多类分类

您想要的是多标签分类,因此您将使用二元交叉熵损失或Sigmoid交叉熵损失。它是 Sigmoid 激活加上交​​叉熵损失。与 Softmax 损失不同,它对于每个向量分量(类)都是独立的,这意味着为每个 CNN 输出向量分量计算的损失不受其他分量值的影响。这就是为什么它被用于多标签分类,其中属于某个类的元素的洞察不应该影响另一个类的决策。

现在,为了处理类别不平衡,您可以使用加权 Sigmoid 交叉熵损失。因此,您将根据正例的数量/比例来惩罚错误的预测。

关于python - 对于负数与正数比率非常高的多标签分类,应使用哪些损失函数和指标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59336899/

相关文章:

python - 如何使用pandas对时间序列数据进行重采样

python - CNN OCR 机器可读区

python - Keras - 整个训练过程中损失 Nan 和 0.333 准确度

python - 在 pycharm 上加载经过训练的 Tensorflow 保存模型时出错。值错误 : invalid literal for int() with base 10: 'class_name'

python - 如何从Python中的字符串中删除一些字符?

python - 在 Odoo 中隐藏菜单项?

python - 将 Django OAuth2 提供程序与 JupyterHub 结合使用

machine-learning - 如何在生产环境中部署机器学习算法?

swift - 下载自定义 CoreML 模型并加载以供使用 [Swift]

python - 绑定(bind)错误的上下文时,mxnet 不会抛出任何错误