我使用完全卷积神经网络(链接到纸)做图像分割:https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdfTensorflow:加权稀疏SOFTMAX与交叉熵损失
这可以被认为是像素分类(用于最终的每个像素获得一个标签)
我正在使用tf.nn.sparse_softmax_cross_entropy_with_logits丢失函数。
loss = tf.reduce_mean((tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits,
labels=tf.squeeze(annotation, squeeze_dims=[3]),
name="entropy")))
一切都很顺利。然而,我看到在绝大多数像素(95%以上)中出现了一类,称为这个类别0.假设我们有另外三个类别,1,2和3.
什么是最简单的方法把重量放在类上?从本质上讲,我想相比于其他三类谁应该有正常体重1
我知道这个功能的存在是为了对0类(如0.1),重量很轻:https://www.tensorflow.org/api_docs/python/tf/losses/sparse_softmax_cross_entropy
它只是看起来我认为它做了完全不同的事情,我不明白权重应该如何与标签具有相同的级别。我的意思是,在我的情况下,权重应该像Tensor([0.1,1,1,1])形状(4,)和等级1,而标签具有形状(batch_size,width,height)和等级3。我错过了什么吗?
上PyTorch等效将是
torch.nn.CrossEntropyLoss(weight=None, size_average=True, ignore_index=-100)
其中权重是炬张量[0.1,1,1,1]
谢谢!
我认为它主要是在[这个问题](https://stackoverflow.com/questions/44560549/unbalanced-data-and-weighted-cross-entropy/44563055),只是用交叉熵替换稀疏交叉熵。 – user1735003