【问题标题】:sparse mutilabel last activation/ loss function稀疏多标签最后激活/损失函数
【发布时间】:2020-08-31 05:16:22
【问题描述】:
我正在使用 keras 开发一个多标签分类模型。
如果我使用sigmoid 作为binary cross-entropy loss 的最后一个激活函数,我在第一个epoch 中获得了98% 的准确率,但它实际上并没有学到任何东西。这是因为我有 800 个类别,平均有 2-3 个真阳性。
所以我改为使用sigmoid 和categorical cross-entropy loss 似乎效果更好,但我认为不推荐?
我想要一些关于在这种情况下我应该使用什么激活和损失的指导。谢谢!
【问题讨论】:
标签:
python
machine-learning
keras
neural-network
multilabel-classification
【解决方案1】:
我建议你使用softmax激活和categorical cross-entropy进行多分类。
要了解原因:
使用softmax - softmax 输出总和为1.0,这使我们能够将它们解释为概率。当您想选择一个可能的选项时 - 您希望将模型的结果解释为获得给定课程的机会。对于sigmoid - 你没有这种解释。但这只是冰山一角。在多分类的情况下——因为给定接近1.0 的概率自动使所有其他概率接近0.0,所以如果你的激活函数可以捕获这种依赖关系是可以的——softmax 做到了。在 sigmoid 的情况下 - 这种依赖关系不能直接建模 - 是什么使得所有概率接近 0.0 成为可能,例如
使用categorical loss 代替binary - 想象以下情况。您有一个属于第 2 类的示例(可能有 0、1、2、...、100 个)。如果您预测此示例属于第 1 类 - 您仍然有 98% 的准确率进行此预测 - 因为您正确预测这不是 0、3、...、100 类。请记住,当您使用 sigmoid 时会发生这种情况 - 对于每个类,您都在预测给定类是否属于该类。