我有两个类别的不平衡数据集。我正在使用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,但您应该检查库的详细信息。
关于python - 使用 class_weight 来不平衡数据-.fit_generator(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65834886/