我想看看如何计算交叉熵,但是下面的代码给出了不同的结果。
在一种情况下,我使用了交叉熵公式,在第二种情况下,我仅使用了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_prime
和cross_entropy
获得的结果:
[0.5116534 0.33509448 0.96646595]
[-0.35425165 -0.04023812 -1.3620787 ]
答案 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的输出,因为它将产生错误的结果。