这个答案解释了我们如何使用类权重来惩罚 Tensorflow 中的错误分类。我使用的数据集更复杂,所以我在使用类权重时仍然有问题。
有7 类{c0, c1, c2, c3, c4, c5, c6}
每个类的样本数为:
所有样本= 98070
C0= 1607c1= 5292
c2= 4322
c3= 3322
c4= 6629
c5= 7507
c6= 69391
这些类的分布分别: [ 1.6%, 5.4%, 4.4%, 3.4%, 6.7%, 7.6%, 71% ]
Tensorflow 模型将每个测试样本分类为c6,而不使用类权重。 我想用类权重对数来解决这个问题。但是,由于我应该降低多数类的损失并增加少数类的损失,我不知道如何在这里将class_weights用于多类?
换句话说,我想在我的情况下正确计算类权重,并使总和等于 1。阶级权重应该降低多数阶级的损失,增加少数阶级的损失
......注意::::
我使用深度学习的全连接层而不是 SVM 进行分类。
weights = tf.gather(1. / class_weights, labels)
loss = tf.losses.sparse_softmax_cross_entropy(
logits=logits, labels=labels, weights=weights)