使用生成器在 Keras 中为分类标签设置类权重

数据挖掘 喀拉斯 阶级失衡
2021-10-04 07:30:42

我正在处理 Keras 中的不平衡数据集,并希望对我的少数类的样本给予更高的权重。fit()函数有一个很好的sample_weight论点,但是由于我的数据量很大,我必须使用fit_generator().

fit_generator()有一个class_weight论点,这似乎对这个目的很有用,并且已经在另一个问题中讨论过。但是,在这种情况下,标签不是单热编码/分类的,我找不到 using 是否class_weight也允许分类数据。

可以将class_weight参数用于单热编码/分类标签,如果可以,如何?还是我必须求助于自定义加权损失函数?

1个回答

对于分类数据,最好使用sample_weight而不是class_weight参数。这可以通过简单地为特定类别的所有样本赋予相同的权重来完成。sample_weight适用于分类数据,因为在class_weight.

请参阅:Keras 顺序模型方法

您可以传递一个与输入样本长度相同的平面 (1D) Numpy 数组(权重和样本之间的 1:1 映射),或者在时间数据的情况下,您可以传递一个具有形状的二维数组(样本、序列长度),对每个样本的每个时间步应用不同的权重。在这种情况下,您应该确保在 compile() 中指定 sample_weight_mode="temporal"。

正如您提到的,另一种方法是使用自定义加权损失函数。可以在此处找到有关它的详细讨论。