交叉熵给出不同的值

时间:2018-08-28 23:24:18

标签: python tensorflow

我想看看如何计算交叉熵,但是下面的代码给出了不同的结果。
在一种情况下,我使用了交叉熵公式,在第二种情况下,我仅使用了tf.nn.softmax_cross_entropy_with_logits

labels=tf.constant([[1,0],[1,0],[0,1]],tf.float32)
s = tf.Variable(tf.random_normal([3,2]))

softmax = tf.nn.softmax(s)
ss_prime= tf.reduce_sum(labels* tf.log(softmax),axis=1)
cross_entropy= 
tf.nn.softmax_cross_entropy_with_logits(logits=softmax,labels=labels)

ss_primecross_entropy获得的结果:

[0.5116534  0.33509448 0.96646595]
[-0.35425165 -0.04023812 -1.3620787 ]

1 个答案:

答案 0 :(得分:0)

tf.nn.softmax_cross_entropy_with_logits在内部执行softmax。您需要将未缩放的值(在softmax之前)传递给它。实际上,这就是with_logits的意思。

此处明确记录:https://www.tensorflow.org/api_docs/python/tf/nn/softmax_cross_entropy_with_logits

  

警告:此操作期望未缩放的logit,因为它执行softmax   在内部登录以提高效率。请勿使用   softmax的输出,因为它将产生错误的结果。