[英]Class weights worsen my keras classification model
我有一个 model 用于对一些数据进行分类,它的目标 output 为 21。它使用亚当优化器和分类交叉熵损失。 为了改善 model 损失,我对数据集中的 class 频率进行了可视化,发现前 2 个类别的频率约为 25,000 和 20,000,而最低的 2 个类别约为 4、40。范围从 100 到 2000。我意识到这是值的明显差异,并尝试添加我使用 sklearn 提取的类内权重,如下所示:
我的 y 数组采用 one-hot 编码样式,例如:
class1, class2, class3, class4 ... class21
0 0 1 0 ... 0
1 0 0 0 ... 0
0 1 0 0 ... 0
from sklearn.utils.class_weight import compute_class_weight
y_int = np.argmax(y.to_numpy(), axis=1)
weights = compute_class_weight('balanced', classes=np.unique(y_int), y=y_int)
di = dict(enumerate(class_weights))
但是我的损失恶化了,到第 50 个时期,我开始获得 30 - 50 范围内的损失值。 与没有 class 权重的情况相比,我得到了大约 0.4,这太可怕了。
我提取 class 权重的方式有问题吗? 还是我不应该完全使用 class 权重? 如果不是,我应该用什么来解释这种巨大的不平衡? -谢谢
Keras 打印训练期间的加权损失; 您可以通过例如将所有 class 权重加倍来确认这一点。 因此,加权 model 的较大损失可能只是表明较小的类别更难分类,现在您将损失的注意力集中在那些您看到分数更差的较小类别上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.