张量流中的sigmoid_cross_entropy损失函数用于图像分割

Jon*_*han 6 python machine-learning neural-network deep-learning tensorflow

我正在尝试了解sigmoid_cross_entropy损失函数对图像分割神经网络的作用:

以下是相关的Tensorflow源代码

zeros = array_ops.zeros_like(logits, dtype=logits.dtype)
cond = (logits >= zeros)
relu_logits = array_ops.where(cond, logits, zeros)
neg_abs_logits = array_ops.where(cond, -logits, logits)
return math_ops.add(
    relu_logits - logits * labels,
    math_ops.log1p(math_ops.exp(neg_abs_logits)), name=name)
Run Code Online (Sandbox Code Playgroud)

我的主要问题是为什么math_ops.add()在返程中会有一个?加法是指图像中每个像素的损失总和,还是总和有所不同?我无法正确地遵循尺寸变化来推断总和。

Bug*_*ler 6

sigmoid_cross_entropy_with_logits 用于多标签分类。

整个问题可以分为独立的类别预测的二元交叉熵损失(例如,1 既是偶数又是素数)。最后收集所有的预测损失并平均它们。

下面是一个例子:

import tensorflow as tf


logits = tf.constant([[0, 1],
                      [1, 1],
                      [2, -4]], dtype=tf.float32)
y_true = tf.constant([[1, 1],
                      [1, 0],
                      [1, 0]], dtype=tf.float32)
# tensorflow api
loss = tf.losses.sigmoid_cross_entropy(multi_class_labels=y_true,
                                       logits=logits)

# manul computing
probs = tf.nn.sigmoid(logits)
loss_t = tf.reduce_mean(y_true * (-tf.log(probs)) +
                        (1 - y_true) * (-tf.log(1 - probs)))

config = tf.ConfigProto()
config.gpu_options.allow_growth = True  # pylint: disable=no-member
with tf.Session(config=config) as sess:
    loss_ = loss.eval()
    loss_t_ = loss_t.eval()
    print('sigmoid_cross_entropy: {: .3f}\nmanual computing: {: .3f}'.format(
        loss_, loss_t_))
------------------------------------------------------------------------------
#output: 
    sigmoid_cross_entropy:  0.463
    manual computing:  0.463
Run Code Online (Sandbox Code Playgroud)

  • 附加和更正:`binary_crossentropy` 也可用于`多类、多标签分类`。你的意思是 `K.mean(K.binary_crossentropy(y_true, y_pred), axis=-1)` 标准化两次,但对于 `K.binary_crossentropy`,`tf.nn.sigmoid_cross_entropy_with_logits` 是在底层,`tf.** nn**.sigmoid_cross_entropy_with_logits` 与 `tf.**losses**.sigmoid_cross_entropy` 不同,前者返回与具有分量逻辑损失的 logits 形状相同的张量。 (2认同)