我对损失函数还很陌生,我遇到了800个二元分类问题(意味着输出处不受彼此影响的800个神经元-每个概率为0或1)。现在查看以下文档:https://www.tensorflow.org/api_docs/python/tf/nn/sigmoid_cross_entropy_with_logits
它似乎使用“ logits”,它是具有线性激活函数的网络输出,并且在损失函数中采用了Sigmoid(二进制分类所需)。
我正在寻找soft-max激活的损失函数,并采用了类似的方法。我想知道为什么未将激活函数添加到网络输出中,而损耗函数接收线性输出(logit),而在损耗函数中应用了激活。
答案 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的值视为主要分类的概率,而将线性用于回归问题。