我正在尝试使用 tensorflow 中的递归神经网络对新闻文章(体育/非体育)进行二进制分类。训练数据高度倾斜 [Sports:Non-Sports::1:9]。
我使用交叉熵作为我的成本函数,它平等地对待两个类。
用户可以通过哪些方式惩罚一个类?或者是否有任何其他适合此目的的成本函数?
我正在尝试使用 tensorflow 中的递归神经网络对新闻文章(体育/非体育)进行二进制分类。训练数据高度倾斜 [Sports:Non-Sports::1:9]。
我使用交叉熵作为我的成本函数,它平等地对待两个类。
用户可以通过哪些方式惩罚一个类?或者是否有任何其他适合此目的的成本函数?
这已经在stackoverflow和crossvalidated中得到了回答。
在这两种情况下,建议都是通过乘以 logits 来为损失函数添加类权重:
loss(x, class) = weights[class] * (-x[class] + log(\sum_j exp(x[j])))
例如,在 tensorflow 中,您可以执行以下操作:
比率 = 31.0 / (500.0 + 31.0) class_weight = tf.constant([ratio, 1.0 - ratio]) logits = ... # 形状 [batch_size, 2] weighted_logits = tf.mul(logits, class_weight) # 形状 [batch_size, 2] xent = tf.nn.softmax_cross_entropy_with_logits( weighted_logits,标签,名称=“xent_raw”)