在一个有一个热门标签的两类问题中,为什么tf.loss.softmax_cross_熵输出非常大的cos

2024-04-25 16:45:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在训练一个mobilenet来进行tf的语义分割。目标有两类:前景(1)背景(0)。所以这是一个两级分类问题。 我选择softmax交叉熵作为损失,使用如下python代码:

tf.losses.softmax_cross_entropy(self.targets, logits)

目标和逻辑的大小是[batch_size, 224, 224, 2]。但是,100批后损失非常大,曲线如下:

enter image description here

从tf的api docus中,我知道tf.losses.softmax_cross_entropy的目标是一个热编码标签,这与我的标签大小为[batch_size,224,224,2]的标签一致,要么是1,要么是0(排他)。 所以,softmax_cross_熵不能用于这样一个两类一类的热标签案例,为什么?如果可以用,我的问题在哪里?在

如果我使用tf.losses.sigmoid_cross_entropytf.losses.sparse_softmax_cross_entropy(只给出标签大小:[batch_size, 224,224,1]),损失将收敛。在


Tags: 目标sizetfbatch语义分类标签entropy
1条回答
网友
1楼 · 发布于 2024-04-25 16:45:03

tf.losses.softmax_cross_entropytf.losses.sparse_softmax_cross_entropy的输入目标格式不同。在

  • For sparse_softmax_cross_entropy_with_logits labels must have the shape [batch_size] and the dtype int32 or int64. Each label is an int in range [0, num_classes-1].
  • For softmax_cross_entropy_with_logits, labels must have the shape [batch_size, num_classes] and dtype float32 or float64.

Labels used in softmax_cross_entropy_with_logits are the one hot version of labels used in sparse_softmax_cross_entropy_with_logits.

参考号:TensorFlow: what's the difference between sparse_softmax_cross_entropy_with_logits and softmax_cross_entropy_with_logits?

因此,要使用softmax_cross_entropy_with_logits使其工作,必须对标签执行tf.one_hot。在

相关问题 更多 >