我用随机数测试了“softmax_cross_entropy_with_logits_v2”
import tensorflow as tf
x = tf.placeholder(tf.float32,shape=[None,5])
y = tf.placeholder(tf.float32,shape=[None,5])
softmax = tf.nn.softmax_cross_entropy_with_logits_v2(logits=x,labels=y)
with tf.Session() as sess:
feedx=[[0.1,0.2,0.3,0.4,0.5],[0.,0.,0.,0.,1.]]
feedy=[[1.,0.,0.,0.,0.],[0.,0.,0.,0.,1.]]
softmax = sess.run(softmax, feed_dict={x:feedx, y:feedy})
print("softmax", softmax)
控制台“softmax [1.8194163 0.9048325]”
我对此功能的理解是此功能仅在logits和标签不同时返回成本。
那为什么它返回0.9048325甚至相同的值?
根据tf.nn.softmax_cross_etnropy_with_logits_v2
的the documentation预计未缩放的输入,因为它在softmax
内部执行logits
操作。因此,您的第二个输入[0,0,0,0,1]在内部软加宽到大致类似[0.15,0.15,0.15,0.15,0.4]的值,然后,此logit的交叉熵和真实标签[0,0, 0,0,1]被计算为你得到的值