使用CNN和交叉熵损失进行属性预测(缺失属性使用负值)

我正在构建一个用于预测图像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函数来确保只有正损失?


回答:

为了清楚起见,你应该将分类器的输出视为三个节点,每个节点的结果各不相同,它们是(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)

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

y_prediction = argmax(p_y_given_x)

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

现在你应该做的是根据你的数据属性选择预测类别的编号。

但首先我们要达成共识

  • 存在:类别0
  • 不存在:类别1
  • 未知:类别2

假设你的对象在图像中不存在,那么你应该取第二个对象的值并应用对数似然

-log(p_y_given_x[y]) 

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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注