tf.nn.softmax_cross_entropy_with_logits输出错误。为什么呢?

时间:2017-05-23 01:30:24

标签: tensorflow

我想用以下命令计算交叉熵函数。此命令首先将sofmax应用于logits,然后应用交叉熵函数。根据交叉熵和(b * loga)的公式,其中b是正确的标签,a是预测的标签。由于在交叉熵公式中对所有类进行求和,所以我希望乘法继续这样。如果在sofmax操作输出后

 [0.45186275  0.27406862  0.27406862]

现在,如果我应用交叉熵,它应该是这样的

 ( 1 * log 0.45186275 + 0 * log 0.27406862 + 0 * log 0.27406862 ) 

我的输出是0.794377,但我期待不同的

a = tf.constant([0.9,0.4,0.4])
b = tf.constant([1,0,0])
result =  tf.nn.softmax_cross_entropy_with_logits(logits=a,labels=b)
sess = tf.InteractiveSession()
sess.run(tf.initialize_all_variables())
print result.eval()

1 个答案:

答案 0 :(得分:1)

我相信 tf.nn.softmax_cross_entropy_with_logits 会计算 sum(-bLog(softmax(a))) -ish,所需的输出为 0.794377 。如果你在手工操作时没有包含负号,那么你将获得 -0.794377 ,这将作为一个损失条款,但你必须最大化在训练时你的损失,而不是最小化。

同样重要的是要注意TF使用自然日志,而不是日志基数10.

相关问题