使用 class_weight 来平衡数据-.fit_generator()

using class_weight for imbalancing data-.fit_generator()

我有 2 个 类 的不平衡数据集。我正在使用 categorical_crossentropy。我想知道我的代码。将 class_weightcategorical_crossentropy 一起使用是否正确?如果是,class_weight 是仅应用于训练集还是应用于整个数据??

我搜索了很多次,但没有找到任何有用的网站。任何帮助将不胜感激。

我的代码:

model.compile(loss='categorical_crossentropy', optimizer=opt_adam, metrics=['accuracy'])
history=model.fit_generator(generate_arrays_for_training(indexPat, train_data, start=0,end=100)
validation_data=generate_arrays_for_training(indexPat, test_data, start=0,end=100)
steps_per_epoch=int((len(train_data)/2)), 
                                validation_steps=int((len(test_data)/2)),
                                verbose=2,class_weight = {0:1, 1:1.181},
                                epochs=65, max_queue_size=2, shuffle=True)

是的,您可以使用具有分类交叉熵的 class 权重。在计算损失函数时应用权重。错误的 class 根据权重进行惩罚。因此权重既不应用于验证集也不应用于测试集。这个想法是在训练时间模型给予更多关注 class 并相应地更新权重。

这就是为什么在测试或验证时,学习到的权重会相对于 class 权重隐含地有偏差。

您的代码中唯一的问题可能是 class 权重。可能是权重必须加起来为 1,但您应该检查库的详细信息。

我没有足够的声誉来发表评论,但由于您要求参考论文,这里是一篇新发表的关于动态调整 class 权重和 class 不平衡的论文。 https://ieeexplore.ieee.org/document/9324926