二元交叉熵和二元交叉熵与keras中的logits有什么区别?
What is the difference between binary crossentropy and binary crossentropy with logits in keras?
在 keras 后端,我们在 K.binary_crossentropy
中有一个标记 with_logits
。正常的二元交叉熵和带 logits 的二元交叉熵有什么区别?假设我使用的是 seq2seq 模型并且我的输出序列是类型 100111100011101
.
我应该使用递归 LSTM 或 RNN 什么来从这些数据中学习,前提是我在输入中给出了类似的序列和时间步长?
这取决于您是否在损失函数之前有一个 sigmoid 层。
如果有一个sigmoid层,它会将class个分数压缩成概率,在这种情况下from_logits
应该是False
。损失函数会将概率转换为 logits,因为这是 tf.nn.sigmoid_cross_entropy_with_logits
所期望的。
如果输出已经是logit(即原始分数),则通过from_logits=True
,不会进行任何转换。
两种选择都可以,选择取决于您的网络架构。顺便说一下,如果术语 logit 看起来很可怕,请查看 this question,其中详细讨论了它。
在 keras 后端,我们在 K.binary_crossentropy
中有一个标记 with_logits
。正常的二元交叉熵和带 logits 的二元交叉熵有什么区别?假设我使用的是 seq2seq 模型并且我的输出序列是类型 100111100011101
.
我应该使用递归 LSTM 或 RNN 什么来从这些数据中学习,前提是我在输入中给出了类似的序列和时间步长?
这取决于您是否在损失函数之前有一个 sigmoid 层。
如果有一个sigmoid层,它会将class个分数压缩成概率,在这种情况下from_logits
应该是False
。损失函数会将概率转换为 logits,因为这是 tf.nn.sigmoid_cross_entropy_with_logits
所期望的。
如果输出已经是logit(即原始分数),则通过from_logits=True
,不会进行任何转换。
两种选择都可以,选择取决于您的网络架构。顺便说一下,如果术语 logit 看起来很可怕,请查看 this question,其中详细讨论了它。