如何在keras中实现BCEWithLogitsLoss
并在将Tensorflow
用作后端时将其用作自定义损失函数。
我在BCEWithLogitsLoss
中定义的PyTorch
中使用了torch
。
如何在Keras中实现相同功能?
答案 0 :(得分:1)
在TensorFlow中,您可以直接调用tf.nn.sigmoid_cross_entropy_with_logits
,这在TensorFlow 1.x和2.0中都可以使用。
如果要坚持使用Keras API,请使用tf.losses.BinaryCrossentropy
并在构造函数调用中设置from_logits=True
。
与PyTorch不同,API中没有明确的示例权重。您可以改为为损失设置reduction=tf.keras.losses.Reduction.NONE
,通过显式乘法进行加权,并使用tf.reduce_mean
减少损失。
xent = tf.losses.BinaryCrossEntropy(
from_logits=True,
reduction=tf.keras.losses.Reduction.NONE)
loss = tf.reduce_mean(xent(targets, pred) * weights))