这个loss function in tensorflow用作keras / tensorflow中的损失函数来加权二元决策
它加权误报与假阴性:
目标* -log(sigmoid(logits))(1 - 目标)* -log(1 - sigmoid(logits))
参数pos_weight用作积极目标的乘数:
目标* -log(sigmoid(logits))* pos_weight(1 - targets)* -log(1 - sigmoid(logits))
有没有人有任何建议,如果他们的损失/奖励不应该具有相同的权重,那么真正的积极因素如何可以加权来反对真实的阴性?
1 回答
首先,请注意,对于交叉熵损失,每个示例都有一些(可能非常非常小的)惩罚(即使正确分类) . 例如,如果正确的类是1并且我们的logit是10,那么惩罚将是
这种损失(非常轻微)推动网络为这种情况产生更高的logit,使其sigmoid更接近1.同样,对于负类,即使logit为-10,损失将使其更加负面 .
这通常很好,因为这些条款的损失非常小 . 如果您希望您的网络实际实现零损失,您可以使用
label_smoothing
. 这可能与 minimizing loss 的经典设置中的网络接近[显然可以通过在损失中添加一些负数来实现网络"reward" . 但这不会改变梯度和训练行为) .话虽如此,您可以针对各种情况(tp,tn,fp,fn)对网络进行不同的惩罚 - 类似于Weight samples if incorrect guessed in binary cross entropy中描述的情况 . (看起来那里的实现实际上是不正确的 . 你想使用
weight_tensor
的相应元素来加权单个log(sigmoid(...))
项,而不是cross_entropy
的最终输出 . )使用这种方案,您可能希望惩罚非常错误的答案,而不是几乎正确的答案 . 但请注意,由于
log(sigmoid(...))
的形状,这已经发生了一定程度 .