【问题标题】: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 从这些数据中学习?
【问题讨论】:
标签:
python
machine-learning
keras
lstm
rnn
【解决方案1】:
这取决于你在损失函数之前是否有一个 sigmoid 层。
如果有sigmoid层,它会将类分数压缩成概率,在这种情况下from_logits应该是False。损失函数会将概率转换为 logits,因为这是 tf.nn.sigmoid_cross_entropy_with_logits 所期望的。
如果输出已经是logit(即原始分数),则通过from_logits=True,则不会进行任何转换。
这两种选择都是可能的,具体选择取决于您的网络架构。顺便说一句,如果 logit 这个词看起来很吓人,请查看this question,其中详细讨论了它。