我正在训练一个多标签分类模型来检测衣服的属性。我在 Keras 中使用迁移学习,重新训练 vgg-19 模型的最后几层。
属性总数为 1000,其中约 99% 为 0。准确率、精确率、召回率等指标都失败了,因为该模型可以预测全零,但仍能获得很高的分数。二元交叉熵、汉明损失等,在损失函数的情况下都不起作用。
我正在使用深度时尚数据集。
那么,我可以使用哪些指标和损失函数来正确衡量我的模型呢?
原文由 Mrinal Jain 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在训练一个多标签分类模型来检测衣服的属性。我在 Keras 中使用迁移学习,重新训练 vgg-19 模型的最后几层。
属性总数为 1000,其中约 99% 为 0。准确率、精确率、召回率等指标都失败了,因为该模型可以预测全零,但仍能获得很高的分数。二元交叉熵、汉明损失等,在损失函数的情况下都不起作用。
我正在使用深度时尚数据集。
那么,我可以使用哪些指标和损失函数来正确衡量我的模型呢?
原文由 Mrinal Jain 发布,翻译遵循 CC BY-SA 4.0 许可协议
实际上你应该使用 tf.nn.weighted_cross_entropy_with_logits
。它不仅用于多标签分类,还有一个 pos_weight
可以像你预期的那样在积极的类别上得到很多关注。
原文由 zhao yufei 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答971 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
哈桑的建议是不正确的——分类交叉熵损失或 Softmax 损失是 Softmax 激活 加上交叉熵损失。如果我们使用这个损失,我们将训练一个 CNN 输出每个图像的 C 个类的概率。它用于 多类分类。
你想要的是多标签分类,所以你将使用 Binary Cross-Entropy Loss 或 Sigmoid Cross-Entropy loss。它是 Sigmoid 激活 加上交叉熵损失。与 Softmax 损失不同,它对于每个向量分量(类)都是独立的,这意味着为每个 CNN 输出向量分量计算的损失不受其他分量值的影响。这就是为什么它用于多标签分类,其中属于某个类的元素的洞察力不应影响另一个类的决策。
现在为了处理类不平衡,您可以使用加权 Sigmoid 交叉熵损失。因此,您将根据正面示例的数量/比率对错误预测进行惩罚。