【问题标题】:tf.nn.softmax_cross_entropy_with_logits is giving wrong output. Why?tf.nn.softmax_cross_entropy_with_logits 给出错误的输出。为什么?
【发布时间】:2017-05-23 12:50:34
【问题描述】:

我想用下面的命令计算交叉熵函数。该命令首先将 sofmax 应用于 logits,然后应用交叉熵函数。根据交叉熵和(b*loga)的公式,其中b是正确的标签,a是预测的标签。由于总和被交叉熵公式中的所有类接管,所以我希望乘法这样进行。如果sofmax运行后输出是

 [0.45186275  0.27406862  0.27406862]

现在如果我应用交叉熵,它应该是这样的

 ( 1 * log 0.45186275 + 0 * log 0.27406862 + 0 * log 0.27406862 ) 

我的输出是 0.794377,但我期待一个不同的

a = tf.constant([0.9,0.4,0.4])
b = tf.constant([1,0,0])
result =  tf.nn.softmax_cross_entropy_with_logits(logits=a,labels=b)
sess = tf.InteractiveSession()
sess.run(tf.initialize_all_variables())
print result.eval()

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    我相信 tf.nn.softmax_cross_entropy_with_logits 计算 sum(-bLog(softmax(a)) )-ish 并且期望的输出是 0.794377强>。如果您在手动操作时不包含负号,那么您将得到 -0.794377,这将用作损失项,但您必须最大化您的损失,而不是最小化它,训练时。

    还需要注意的是,TF 使用自然对数,而不是以 10 为底的对数。

    【讨论】:

    • 自然对数,不是以十为底的。
    猜你喜欢
    • 2020-12-24
    • 2021-05-26
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    相关资源
    最近更新 更多