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的二元交叉熵有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 keras 中创建自定义损失函数? (自定义加权二元交叉熵)