【问题标题】:Does tensorflow support to calculate the cross entropy loss of a subset of labels for semantic segmentation?tensorflow 是否支持计算语义分割标签子集的交叉熵损失?
【发布时间】:2018-08-25 12:09:59
【问题描述】:

我正在使用 tensorflow 进行语义分割任务。我有 5 个班级,我这样计算损失:

loss = tf.reduce_mean((tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=tf.squeeze(annotation, squeeze_dims=[3]), name="entropy")))

logits 有形状 (batch_size, picture_height, picture_width, 5)

annotation 有形状 (batch_size, picture_height, picture_width, 1)

现在我只想计算前 4 类的损失,忽略第 5 类。我怎样才能做到这一点?

比如我只想计算前4个类的Cohen's kappa,可以在sklearn.metrics.cohen_kappa_score中设置labels参数:

kappa = cohen_kappa_score(y_true, y_pred, labels=[0,1,2,3])

【问题讨论】:

  • 所以你的意思是,你用五个 logit 值计算 softmax,然后是交叉熵,但是无论类是 5 的地方都只是掩盖了那个值?然后应该对所有元素进行均值,将 5 类交叉熵归零,还是仅对非 5 类元素进行平均?
  • 只计算非5像素的交叉熵损失。

标签: python tensorflow semantic-segmentation


【解决方案1】:

您可以使用接受 one-hot 标签tf.losses.softmax_cross_entropy 的非稀疏版本的交叉熵损失,并使用 tf.one_hot 手动创建 one-hot 向量。

它接受depth 参数,该参数只允许使用第一个标签,或者您可以在传递给损失之前对结果单热编码张量进行切片。

【讨论】:

    猜你喜欢
    • 2017-06-26
    • 2018-09-12
    • 2018-12-23
    • 1970-01-01
    • 2017-11-11
    • 2019-06-08
    • 2018-05-31
    • 2022-11-20
    • 2017-07-20
    相关资源
    最近更新 更多