TensorFlow v10重新制定了S形交叉熵损失以在给定S形的情况下工作?

时间:2018-10-26 08:06:22

标签: python tensorflow machine-learning

阅读tf.nn.sigmoid_cross_entropy_with_logits的TF指南会将logitslabels传递给函数,然后将sigmoid操作应用于logits。为了避免在exp(-x)x < 0中发生溢出,他们将函数重新构造为:

max(x, 0) - x * z + log(1 + exp(-abs(x)))

这很好,但是在某些情况下,您可能希望网络的输出具有S型变换并使用tf.nn.sigmoid_cross_entropy_with_logits而又不会使损耗再次应用S型。在避免exp(-x)出现x < 0溢出的同时,如何重新制定呢?

1 个答案:

答案 0 :(得分:0)

  

在某些情况下,您希望网络的输出具有   乙状结肠的变换和使用   tf.nn.sigmoid_cross_entropy_with_logits而不会造成损失   再次成为乙状结肠。

如果我没记错的话,您尝试给Logit一个S型激活处理的值。以(0,1)为边界的已处理值。我认为x永远不会小于0。将0到1之间的值添加到logit似乎是不合理的,因为该值的S形总是在0.5到Sigmoid(1)之间,这意味着对于负数标签,模型尝试将其训练为0,但模型的最小值为0.5。负样本的损失始终存在(如log(1 + exp(0.5))),并且永远不能最小化。