gpt4 book ai didi

classification - Tensorflow 中类不平衡二元分类器的损失函数

转载 作者:行者123 更新时间:2023-12-02 20:19:09 24 4
gpt4 key购买 nike

我正在尝试将深度学习应用于目标类(500k,31K)之间高度不平衡的二元分类问题。我想编写一个自定义损失函数,应该是这样的:最小化(100-((预测的小类)/(总的小类))* 100)

感谢有关我如何构建此逻辑的任何指示。

最佳答案

您可以通过乘以 logits 将类别权重添加到损失函数中。常规的交叉熵损失是这样的:

loss(x, class) = -log(exp(x[class]) / (\sum_j exp(x[j])))
= -x[class] + log(\sum_j exp(x[j]))

在加权情况下:

loss(x, class) = weights[class] * -x[class] + log(\sum_j exp(weights[class] * x[j]))

因此,通过乘以 logits,您可以根据类别权重重新调整每个类别的预测。

例如:

ratio = 31.0 / (500.0 + 31.0)
class_weight = tf.constant([ratio, 1.0 - ratio])
logits = ... # shape [batch_size, 2]
weighted_logits = tf.mul(logits, class_weight) # shape [batch_size, 2]
xent = tf.nn.softmax_cross_entropy_with_logits(
weighted_logits, labels, name="xent_raw")

现在有一个标准损失函数支持每批处理的权重:

tf.losses.sparse_softmax_cross_entropy(labels=label, logits=logits, weights=weights)

权重应从类权重转换为每个示例的权重(形状为[batch_size])。请参阅documentation here .

关于classification - Tensorflow 中类不平衡二元分类器的损失函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35155655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com