我很难计算张量流中的交叉熵。特别是,我正在使用以下功能:
tf.nn.softmax_cross_entropy_with_logits()
使用看似简单的代码,我只能让它返回一个零
import tensorflow as tf
import numpy as np
sess = tf.InteractiveSession()
a = tf.placeholder(tf.float32, shape =[None, 1])
b = tf.placeholder(tf.float32, shape = [None, 1])
sess.run(tf.global_variables_initializer())
c = tf.nn.softmax_cross_entropy_with_logits(
logits=b, labels=a
).eval(feed_dict={b:np.array([[0.45]]), a:np.array([[0.2]])})
print c
回报
0
我对交叉熵的理解是这样的:
H(p,q) = p(x)*log(q(x))
其中 p(x) 是事件 x 的真实概率,q(x) 是事件 x 的预测概率。
如果输入 p(x) 和 q(x) 的任意两个数字,则使用这样的
0<p(x)<1 AND 0<q(x)<1
应该有一个非零交叉熵。我期望我错误地使用了 tensorflow。在此先感谢您的帮助。
原文由 David Kaftan 发布,翻译遵循 CC BY-SA 4.0 许可协议
就像他们说的,没有“softmax”就不能拼写“softmax_cross_entropy_with_logits”。
[0.45]
的Softmax是[1]
,和log(1)
是0