Neural network 如何考虑一个热向量的结果和正确桶之间的差异?

Neural network 如何考虑一个热向量的结果和正确桶之间的差异?,neural-network,tensorflow,deep-learning,conv-neural-network,Neural Network,Tensorflow,Deep Learning,Conv Neural Network,嗨,我在我的大学里使用tensorflow,试图仅使用模拟产生的图像对模拟程序的转向角进行分类 转向角是从-1到1的值,我将它们分为50个“铲斗”。所以我的预测向量的第一个值意味着预测的转向角在-1和-0.96之间。 下面显示了我正在使用的分类和优化函数 cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction, y)) optimizer = tf.train.AdamOptimizer(0.001).mi

嗨,我在我的大学里使用tensorflow,试图仅使用模拟产生的图像对模拟程序的转向角进行分类

转向角是从-1到1的值,我将它们分为50个“铲斗”。所以我的预测向量的第一个值意味着预测的转向角在-1和-0.96之间。 下面显示了我正在使用的分类和优化函数

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction, y))
optimizer = tf.train.AdamOptimizer(0.001).minimize(cost)
y是一个向量,有49个零和一个1表示正确的桶。我现在的问题是。 如果正确的桶位于指数25,我如何考虑26的预测比48的预测好得多


我没有发布实际的网络,因为它只是一对conv2d和maxpool层,在最后有一个完全连接的层。

因为您正在应用交叉熵或负对数似然。根据预测结果和基本事实,您正在惩罚系统


所以说,你的系统预测了50个类的输出的不同数字,最高的是25个类,但你的基本事实是26个类。因此,您的系统将获取26上的预测值,并调整参数,以便在下次看到此输入时在此输出上生成最大值

因为您正在应用交叉熵或负对数似然。根据预测结果和基本事实,您正在惩罚系统


所以说,你的系统预测了50个类的输出的不同数字,最高的是25个类,但你的基本事实是26个类。因此,您的系统将获取26上的预测值,并调整参数,以便在下次看到此输入时在此输出上生成最大值

你可以做两件基本的事情:

将y和预测值更改为-1..1范围内的标量;使损失函数为(y-预测)**2或其他形式。一个非常不同的模式,但可能更合理的一个热点


保留一个热目标和损耗,但有y=target*w,其中w是一个常数矩阵,大多数为零,对角线上为1s,下一对角线上为较小的值,元素(例如y(i)=target(i)*1.+target(i-1)*.5+target(i+1)*.5+…);有点粗俗,但它应该收敛到合理的程度。

你可以做两件基本的事情:

将y和预测值更改为-1..1范围内的标量;使损失函数为(y-预测)**2或其他形式。一个非常不同的模式,但可能更合理的一个热点


保留一个热目标和损耗,但有y=target*w,其中w是一个常数矩阵,大多数为零,对角线上为1s,下一对角线上为较小的值,元素(例如y(i)=target(i)*1.+target(i-1)*.5+target(i+1)*.5+…);有点恶心,但应该是合理的。

谢谢你的回答。我明白你们的意思,但你们会建议采取什么行动?谢谢你们的回答。我明白你的意思,但你会建议采取什么行动?是的,第一个选择也是我一直在考虑的。我现在的问题是,为了得到-1和1之间的值,我必须在输出层中使用什么激活函数。第二个选择真的很有趣。非常感谢,我会考虑的。是的,第一个选择也是我一直在考虑的。我现在的问题是,为了得到-1和1之间的值,我必须在输出层中使用什么激活函数。第二个选择真的很有趣。非常感谢你,我会考虑的。