Python 类别权重恶化了我的keras分类模型

Python 类别权重恶化了我的keras分类模型,python,keras,scikit-learn,deep-learning,Python,Keras,Scikit Learn,Deep Learning,我有一个模型,用于对一些数据进行分类,目标输出为21。它使用adam优化器和分类交叉熵损失。为了改善模型损失,我对数据集中的类频率进行了可视化,发现前两个类的频率约为25000和20000,而最低两个类的频率约为4,40。其他课程从100到2000不等。我意识到这是一个明显的值差异,并尝试添加我使用sklearn提取的类权重,如下所示: 我的y数组采用一种热编码样式,类似于: class1、class2、class3、class4。。。类别21 0 0 1

我有一个模型,用于对一些数据进行分类,目标输出为21。它使用adam优化器和分类交叉熵损失。为了改善模型损失,我对数据集中的类频率进行了可视化,发现前两个类的频率约为25000和20000,而最低两个类的频率约为4,40。其他课程从100到2000不等。我意识到这是一个明显的值差异,并尝试添加我使用sklearn提取的类权重,如下所示:

我的y数组采用一种热编码样式,类似于:

class1、class2、class3、class4。。。类别21
0        0       1       0    ...    0
1        0       0       0    ...    0
0        1       0       0    ...    0
从sklearn.utils.class\u权重导入计算\u class\u权重
y_int=np.argmax(y.to_numpy(),轴=1)
权重=计算类权重('balanced',类=np.unique(y\u int),y=y\u int)
di=dict(枚举(类权重))
但是我的损失越来越严重,到了第50个纪元,我开始得到30-50之间的损失值。这是可怕的,相比之下,没有类权重,我得到了约0.4

我提取类权重的方法有问题吗?或者我不应该完全使用类权重? 如果不是,我应该用什么来解释这种巨大的不平衡?
-谢谢

Keras打印训练期间的加权损失;您可以通过(例如)将所有类权重加倍来确认这一点。因此,加权模型的较大损失可能只是表明较小的类别更难分类,现在您将损失的注意力集中在那些较小的类别上,您会看到较差的分数。

您从哪里获得损失分数?它们可能是加权损失吗?当我使用model.fit()在keras中训练我的深度学习模型时,我得到了损失分数,这不是“加权损失”,我使用的是“分类交叉熵”损失。哇,谢谢。因此,最好的选择是完全删除类权重,因为它有一个艰难的时期?不一定;类权重的使用是为了迫使模型更加关注那些小类的正确性。这取决于您的用例是否是您想要的。损失大多是无与伦比的;如果可以,请使用特定于上下文的度量。