我正在使用完全卷积神经网络进行图像分割(论文链接):https ://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdf
这可以被认为是像素分类(最终每个像素都得到一个标签)
我正在使用 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]
谢谢!