【发布时间】:2019-04-15 03:27:39
【问题描述】:
我正在处理一个二元语义分割任务,其中一个类在任何输入图像中的分布都非常小,因此只有几个像素被标记。使用sparse_softmax_cross_entropy时 忽略此类时,总体错误很容易减少。现在,我正在寻找一种方法来通过一个系数对类进行加权,该系数可以惩罚与其他类相比更高的特定类的错误分类。
损失函数的文档说明:
权重作为损失的系数。如果提供了标量,则损失只是按给定值缩放。如果 weights 是一个形状为 [batch_size] 的张量,则损失 weights 适用于每个对应的样本。
如果我理解正确,它表示批次中特定样本的权重与其他样本不同。但这实际上不是我想要的。有谁知道如何实现这个损失函数的加权版本,其中权重衡量特定类而不是样本的重要性?
【问题讨论】:
-
首先,你确定你需要softmax_cross_entropy,而不是sigmoid_cross_entropy?
-
您错过了一个事实,即没有(据我所知)sigmoid_cross_entropy 的稀疏版本。因此,我必须将标签表示为单热编码。在我的例子中,输出由两个通道组成,每个通道代表一个类。 softmax 交叉熵的稀疏版本跨维度计算 softmax,因此像素(在 argmax 之后)为 1 或 0。
-
你的输出(logits)和标签的确切形状是什么?
-
logits 的形状是 (?,214, 214, 2),标签的形状是 (?, 214, 214, 1)。在哪里 ?取决于批量大小。
标签: python tensorflow deep-learning conv-neural-network