不平衡数据集的加权交叉熵 - 多类分类

数据挖掘 深度学习 多类分类 阶级失衡
2021-10-02 08:12:29

我正在尝试将图像分类为 100 多个类别,不同大小范围从 300 到 4000(平均大小为 1500,标准为 600)。我正在使用一个非常标准的 CNN,其中最后一层输出一个长度为类的向量,并使用 pytorch 的损失函数 CrossEntropyLoss。

我试着用 weights=max(sizes)sizes 对于改进未加权版本的交叉熵损失,幅度不大。

我还考虑过复制图像,以使所有类最终都与大类的大小相同。

有没有处理这种不平衡的标准方法?

2个回答

如果您只是在寻找替代损失函数:

Imagenet 上显示了 Focal Loss 确实可以帮助解决这个问题。

焦点损失为交叉熵损失增加了一个调节因子,确保负/多数类别/简单决策不会压倒由于少数/困难类别造成的损失。

我会考虑使用它,它似乎真的很有希望。

焦点损失公式

焦点损失论文链接: https ://arxiv.org/pdf/1708.02002.pdf

要处理类不平衡,什么都不做——使用普通的交叉熵损失,它可以处理类不平衡。确保训练集中每个类都有足够的实例,否则神经网络可能无法学习:神经网络通常需要大量数据。假设您关心全局准确性(而不是每个类别的准确性的平均值,例如),我不会为加权交叉熵损失或复制图像而烦恼。

你的训练听起来很小。为了解决这个问题,您可以尝试从现有的预训练模型开始并微调最后几层。还使用图像增强。