我正在以以下方式计算成本:

cross_entropy = tf.nn.softmax_cross_entropy_with_logits(y, y_) 
cost = tf.reduce_mean(cross_entropy); 

对于第一个成本,我将获得0.693147,当参数/权重初始化为0时,这可以预期在二进制分类中。

我使用的是一个_hot标签。

但是,在使用随机梯度下降完成训练时期后,我发现的成本大于1。

这是预期的吗?

有帮助吗?

解决方案

以下代码本质上确实是TF的 softmax_cross_entropy_with_logits 函数确实(在软性上的crossentropy y_y):

import scipy as sp
import numpy as np

def softmax(x):
    e_x = np.exp(x - np.max(x))
    return e_x / e_x.sum(axis=0)

def crossentropy(true, pred):    
    epsilon = 1e-15

    pred = sp.maximum(epsilon, pred)
    pred = sp.minimum(1-epsilon, pred)

    ll = -sum(
        true * sp.log(pred) + \
            sp.subtract(1,true) * \
            sp.log(sp.subtract(1, pred))
    ) / len(true)

    return ll

==

true = [1., 0.]
pred = [5.0, 0.5]

true = softmax(true)
pred = softmax(pred)

print true
print pred

print crossentropy(true, pred)

==

[ 0.73105858  0.26894142]
[ 0.98901306  0.01098694]
1.22128414101

如您所见,没有理由为什么二进制分类的crossentropy不能> 1> 1,并且不难提出这样的示例。

**上面的crossentropy的计算如 https://www.kaggle.com/wiki/logarithmicloss, ,softmax如 https://en.wikipedia.org/wiki/softmax_function

upd:当logloss> 1 so时,它的含义有很好的解释: https://stackoverflow.com/a/35015188/1166478

许可以下: CC-BY-SA归因
scroll top