我希望在keras model.fit中使用class_weight参数来处理不平衡的训练数据。通过查看一些文档,我了解到可以传递像这样的字典:
在这个例子中,class-2在损失函数中会受到更高的惩罚。
问题是我的神经网络输出采用了one-hot编码,即class-0=(1,0,0),class-1=(0,1,0),class-3=(0,0,1)。
我们如何为one-hot编码的输出使用class_weight?
通过查看 Keras中的一些代码,可以看出
相关:如何在Keras中为不平衡的类别设置类权重?
class_weight = {0 : 1,
1: 1,
2: 5}
在这个例子中,class-2在损失函数中会受到更高的惩罚。
问题是我的神经网络输出采用了one-hot编码,即class-0=(1,0,0),class-1=(0,1,0),class-3=(0,0,1)。
我们如何为one-hot编码的输出使用class_weight?
通过查看 Keras中的一些代码,可以看出
_feed_output_names
包含一个输出类别列表,但在我的情况下,model.output_names
/model._feed_output_names
返回['dense_1']
。相关:如何在Keras中为不平衡的类别设置类权重?
model.fit()
函数中,直接将class_weight
作为numpy数组传递而不将其转换为字典也可以正常工作。 - tsveti_ikoelif isinstance(class_weight, dict): ... else: return np.ones((y.shape[0],), dtype=K.floatx())
。您必须提供样本权重,例如class_weight.compute_sample_weight('balanced', y_train)
,使用sklearn。 - user1589759