【问题标题】:Attribute prediction with CNN and cross entropy loss (negative values for absent attributes)使用 CNN 和交叉熵损失进行属性预测(缺失属性的负值)
【发布时间】:2016-11-24 14:03:47
【问题描述】:

我正在构建一个神经网络 (CNN),它可以预测图像的 100 个属性。训练数据如下-

image_name image_attributes

img/img001.jpg -1, 1, -1 , 1, 0 .......-1 , 1

因此,存在的属性具有值1,如果该属性不存在,则为-1,如果未知,则为0。我正在使用 Tensorflow 并将我的损失定义为 -

loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y))

我的问题是,如果我最小化这种损失,有时由于-1 表示缺少某些属性而它具有负值,而我的优化算法将最小化已经为负的损失。不就是分道扬镳吗?

最小化这种损失是正确的,还是应该使用 mod 函数只产生正损失?

【问题讨论】:

  • soft max 将您的结果转换为介于 0 和 1 之间的概率。如果答案不是所选类别中的答案,则使用交叉熵对答案进行惩罚。所以你应该看到你的结果是 x,y,z 哪个更有可能服从选择和惩罚信心
  • 您应该为您的课程使用 one-hot-encoding。这意味着将标签编码为 0 和 1 的 (samples, 3) 形式,具体取决于该样本所属的类别。
  • @ThomasPinetz 这些是属性,即非独占类。那么一种热编码将如何工作呢? '0' 表示的未知属性呢
  • 你还有 3 节课。 1 0 0 将是未知的。 0 1 0 为假,0 0 1 为真。
  • 真的吗?谁对拒绝投票的问题有疑问?请注意解释。

标签: machine-learning computer-vision tensorflow deep-learning


【解决方案1】:

因此,为了清楚起见,您应该从分类器中看到您的结果,因为三个节点的结果无论是什么。它们是 (y0,y1,y2),然后通过对这些结果应用 softmax,您将获得一个新值,表示概率范围在 0 到 1 之间的答案

假设你通过应用 softmax 得到这种形式 [1,−2,0] 的结果,你将得到 [0.7,0.04,0.26]

p_y_given_x = softmax(y_given_x)

然后通过应用 argmax,您可以定义根据最高概率结果预测哪个类

y_prediction = argmax(p_y_given_x)

这意味着在我们的例子中 [1,0,0]

现在你应该做的是根据你的数据属性获取预测类的数量。

但首先让我们就一件事达成一致

  • 现在:0 级
  • 不存在:1 类
  • 未知:2 级

假设您的对象不存在于图像中,因此您应该获取第二个对象的值并应用 logliklihood

-log(p_y_given_x[y]) 

这是第二个 0.04 并通过以这种方式反向传播错误来惩罚系统。

【讨论】:

  • 感谢您的详细回答。我明白你在解释什么。我担心我看到的负全损。 Softmax 会将每个属性值转换为概率。我将如何计算交叉熵损失?损失不应该总是正值吗?
  • 我解释的你的 softmax 会将你的结果转换为 0 和 1 的范围内,这是正数。如果它回答了您的问号,请将其标记为答案 plz
  • 我知道它会将我的结果转换为 0-1 但基本事实不在 0-1 的范围内,它是 -1,0,-1 并计算交叉熵损失 sumofall (- Yi*ln(1/Pi)) 可能会给出负值。
  • 我还详细解释了您必须将 GT 转换为范围 (y0,y1,y2) 上存在的类别,其中一个代表类别。所以你应用日志的位置刚好超过了 softmax 的预测
  • 并非如此,您的 cmets 令人困惑。无论如何感谢您帮助队友。欣赏它:)。我仍然会将其标记为正确答案。将根据我的基准测试发布我的结果。我正在测试不同数据编码的效果。
【解决方案2】:

考虑将您的范围更改为 [0, 1],其中接近 0 不存在,接近 1 存在,并且未知是任何不超过阈值的值。

您试图获得一个标量值来表示两个维度:属性的存在和预测的置信度。

【讨论】:

  • 是的,我可以做到,但我只是对一种方法进行基准测试,以明确预测未知数。最后的手段是简单的一次热编码和基于概率的阈值。
  • 如果使用[0, 1]完全一样,其中0.5是中间值...
  • 好的!这就是我正在试验的。因此将返回结果。谢谢你:)
猜你喜欢
  • 2018-03-23
  • 1970-01-01
  • 2021-08-25
  • 2020-06-15
  • 2018-09-03
  • 2016-08-01
  • 2019-06-19
  • 2017-07-05
  • 2017-12-08
相关资源
最近更新 更多