为什么 softmax_cross_entropy_with_logits_v2 return 花费相同的价值
why softmax_cross_entropy_with_logits_v2 return cost even same value
我测试过"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 和标签不同时,此函数仅 returns 成本。
那为什么 returns 0.9048325 甚至是相同的值?
tf.nn.softmax_cross_etnropy_with_logits_v2
根据 the documentation 期望未缩放的输入,因为它在内部对 logits
执行 softmax
操作。因此,您的第二个输入 [0, 0, 0, 0, 1] 在内部被软化为大致类似于 [0.15, 0.15, 0.15, 0.15, 0.4] 的东西,然后,此 logit 和真实标签的交叉熵 [0, 0, 0, 0, 1] 被计算为你得到的值
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]
。
我测试过"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 和标签不同时,此函数仅 returns 成本。
那为什么 returns 0.9048325 甚至是相同的值?
tf.nn.softmax_cross_etnropy_with_logits_v2
根据 the documentation 期望未缩放的输入,因为它在内部对 logits
执行 softmax
操作。因此,您的第二个输入 [0, 0, 0, 0, 1] 在内部被软化为大致类似于 [0.15, 0.15, 0.15, 0.15, 0.4] 的东西,然后,此 logit 和真实标签的交叉熵 [0, 0, 0, 0, 1] 被计算为你得到的值
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]
。