我有一个包含两个类别的不平衡数据集。我使用的是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)
回答:
是的,你可以将类权重与分类交叉熵一起使用。这些权重在计算损失函数时被应用。错误分类会根据权重进行惩罚。因此,权重既不应用于验证集,也不应用于测试集。训练时的理念是模型会对某个类别给予更多关注,并相应地更新权重。
因此,在测试或验证时,学习到的权重会隐式地根据类权重产生偏差。
你代码中唯一可能的问题可能是类权重。可能权重要加起来等于1,但你应该查看库的详细信息来确认这一点。