为什么softmax_cross_entropy_with_logits_v2的返回成本相同

UfX*_*pri 4 tensorflow softmax cross-entropy

我已经用随机数测试过“ 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)
Run Code Online (Sandbox Code Playgroud)

控制台“ softmax [1.8194163 0.9048325]”

我对该功能的了解是,此功能仅在logit和标签不同时才返回成本。

那为什么它甚至返回相同的值0.9048325?

use*_*663 6

tf.nn.softmax_cross_entropy_with_logits_v2起作用的方式是对x数组执行softmax 来将数组转换为概率:

在此处输入图片说明

i数组的索引在哪里。然后的输出tf.nn.softmax_cross_entropy_with_logits_v2将是-log(p)和标签之间的点积:

在此处输入图片说明

由于标签为0或1,因此只有标签等于1的项才起作用。因此,在您的第一个样本中,第一个索引的softmax概率为

在此处输入图片说明

和输出将是

在此处输入图片说明

您的第二个示例将有所不同,因为x[0]与有所不同x[1]