有人可以解释为什么以下代码会生成array([ 0.59813887, 0.69314718], dtype=float32)
? 例如,numpy.log(0.5) = 0.69314718
,但是 0.598138 是怎么来的?
import tensorflow as tf
res1 = tf.nn.sparse_softmax_cross_entropy_with_logits(_sentinel=None, labels=[1, 0], logits=[[0.4, 0.6], [0.5, 0.5]], name=None)
res2 = tf.nn.sparse_softmax_cross_entropy_with_logits(_sentinel=None, labels=[0, 1], logits=[[0.4, 0.6], [0.5, 0.5]], name=None)
res3 = tf.nn.sparse_softmax_cross_entropy_with_logits(_sentinel=None, labels=[1, 0], logits=[[0.6, 0.4], [0.5, 0.5]], name=None)
sess = tf.Session()
sess.run(res1)
您提供的 logits 分别用于 0 类和 1 类(这就是 tensorflow 的理解方式)。
因此,对于res1
第一个数据点,对于- prob(class1) 是 0.6
根据定义,交叉熵是 -
-np.log(np.exp([0.6]) / np.sum(np.exp([0.4, 0.6])))
同样,对于第二种情况——
-np.log(np.exp([0.5]) / np.sum(np.exp([0.5, 0.5])))
给出所需的输出。
这与 Tensorflow 的输出一致。希望这可以帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句