首页 > 解决方案 > 使用 class_weight 来平衡 data-.fit_generator()

问题描述

我有 2 个类的不平衡数据集。我正在使用categorical_crossentropy. 我想知道我的代码。class_weight与一起使用是否正确categorical_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)

标签: pythonmachine-learningkerasdeep-learningcross-entropy

解决方案


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

这就是为什么在测试或验证时,学习的权重会隐含地偏向于类权重。

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


推荐阅读