具有CNN和交叉熵损失的属性预测(缺少属性的负值)

时间:2016-11-24 14:03:47

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

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

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功能只有正面损失?

2 个答案:

答案 0 :(得分:1)

所以要明确你应该从分类器中看到你的结果,因为三个节点都有它们的结果,无论它是什么。它们是(y0,y1,y2),然后通过在这些结果上应用softmax,您将有一个新值表示0到1之间概率范围内的答案

enter image description here

所以,让我们说你有这个形式的结果[1,-2,0],你应用softmax你将[0.7,0.04,0.26]

p_y_given_x = softmax(y_given_x)

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

y_prediction = argmax(p_y_given_x)

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

现在你应该做的是根据你的数据归因来获取预测类的数量。

但首先让我们同意一件事

  • 目前:0级
  • 不存在:1级
  • 未知:2级

让我们说你的对象不在图像中,所以你应该取第二个对象的值并应用logliklihood

-log(p_y_given_x[y]) 

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

答案 1 :(得分:0)

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

您正在尝试使用标量值来表示两个维度:属性的存在和预测的可信度。