具有Sigmoid激活功能而不是线性激活以及在损失中使用Sigmoid的差异

时间:2019-06-17 23:17:53

标签: tensorflow loss-function softmax sigmoid

我对损失函数还很陌生,我遇到了800个二元分类问题(意味着输出处不受彼此影响的800个神经元-每个概率为0或1)。现在查看以下文档:https://www.tensorflow.org/api_docs/python/tf/nn/sigmoid_cross_entropy_with_logits

它似乎使用“ logits”,它是具有线性激活函数的网络输出,并且在损失函数中采用了Sigmoid(二进制分类所需)。

我正在寻找soft-max激活的损失函数,并采用了类似的方法。我想知道为什么未将激活函数添加到网络输出中,而损耗函数接收线性输出(logit),而在损耗函数中应用了激活。

3 个答案:

答案 0 :(得分:1)

没有大的理由。乙状结肠用于损耗

  • 让您在其他地方节省一步
  • 确保对损失的每个输入都进行归一化,因此介于(0,1)之间。

如果您不需要那种便利(实际上给您带来痛苦),只需使用其他预定义的损失(tf.losses.log_loss)或为自己做一个。 :)

答案 1 :(得分:0)

S型/ softmax和交叉熵的简单应用在数值上是不稳定的。这是由于S型中的exp和softmax中的log。您可能会遇到上溢/下溢的问题,这可能导致采取诸如log(0)之类的事情(这将导致-inf)。为了避免这种情况,交叉熵函数利用log(exp(x)) == x这一事实,直接基于logit使用“更智能”的表述。您应该始终使用这些函数来避免数值问题。如果您需要其他位置的实际概率,仍然可以在这些位置应用Sigmoid / softmax。

答案 2 :(得分:0)

非常简单的解释是它在输出中的用法:sigmoid基本上用于二进制分类,方法是将0到1的值视为主要分类的概率,而将线性用于回归问题。