keras中的二元交叉熵和带有logits的二元交叉熵有啥区别?

Posted

技术标签:

【中文标题】keras中的二元交叉熵和带有logits的二元交叉熵有啥区别?【英文标题】:What is the difference between binary crossentropy and binary crossentropy with logits in keras?keras中的二元交叉熵和带有logits的二元交叉熵有什么区别? 【发布时间】:2018-03-12 13:41:02 【问题描述】:

在 keras 后端,我们在 K.binary_crossentropy 中有一个标志 with_logits。正常二元交叉熵和带 logits 的二元交叉熵有什么区别?假设我使用的是 seq2seq 模型,并且我的输出序列是 100111100011101 类型。

如果我在输入中给出类似的序列以及时间步长,我应该使用什么来让递归 LSTM 或 RNN 从这些数据中学习?

【问题讨论】:

【参考方案1】:

这取决于你在损失函数之前是否有一个 sigmoid 层。

如果有sigmoid层,它会将类分数压缩成概率,在这种情况下from_logits应该是False。损失函数会将概率转换为 logits,因为这是 tf.nn.sigmoid_cross_entropy_with_logits 所期望的。

如果输出已经是logit(即原始分数),则通过from_logits=True,则不会进行任何转换。

这两种选择都是可能的,具体选择取决于您的网络架构。顺便说一句,如果 logit 这个词看起来很吓人,请查看this question,其中详细讨论了它。

【讨论】:

以上是关于keras中的二元交叉熵和带有logits的二元交叉熵有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

tf.keras之损失函数

如何在 keras 中创建自定义损失函数? (自定义加权二元交叉熵)

自定义 keras 损失函数二元交叉熵给出不正确的结果

Keras 和 TensorFlow 中所有这些交叉熵损失之间有啥区别?

不是二进制交叉熵中的二进制地面实况标签?

Keras 版本的组合交叉熵和校准损失