首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对于不同的值,交叉熵误差保持不变

对于不同的值,交叉熵误差保持不变
EN

Stack Overflow用户
提问于 2019-05-28 13:32:46
回答 1查看 36关注 0票数 1

我正在使用Cross Entropy和Softmax作为我的神经网络的损失函数。我写的交叉熵函数如下:

代码语言:javascript
复制
def CrossEntropy(calculated,desired):
    sum=0
    n=len(calculated)
    for i in range(0,n):
        sum+=(desired[i] * math.log(calculated[i])) + ((1-desired[i])* math.log(1-calculated[i]))

    crossentropy=(-1)*sum/n
    return crossentropy

现在让我们假设期望的输出是1,0,0,并且我们正在针对两个计算输出进行测试,即和a=0.1,0.9,0.1,0.1问题是,对于这两个计算出来的输出,函数会返回完全相同的交叉熵的值,,那么,神经网络如何知道哪个输出是正确的呢?

EN

回答 1

Stack Overflow用户

发布于 2019-05-30 09:05:34

这是意料之中的,因为您的两个calculated案例中都有一个数据对称

在您的示例中,所需的输出为[1, 0, 0, 0]。因此,真正的类是第一个类。然而,在ab中,您对第一类的预测是相同的(0.1)。对于其他类别(真负片-第二类、第三类和第四类),您也具有这种数据对称性(第二类和第四类在损失计算方面同样重要)。

代码语言:javascript
复制
 a -> 0.9,0.1,0.1
       ^
       |       |
               V
 b -> 0.1,0.1,0.9

因此,你有与预期相同的损失。

如果你去掉这种对称性,你会得到不同的交叉熵损失。请参见下面的示例:

代码语言:javascript
复制
# The first two are from your examples.
print CrossEntropy(calculated=[0.1,0.9,0.1,0.1], desired=[1, 0, 0, 0])
print CrossEntropy(calculated=[0.1,0.1,0.1,0.9], desired=[1, 0, 0, 0])

# below we have prediction for the last class as 0.75 thus break the data symmetry.
print CrossEntropy(calculated=[0.1,0.1,0.1,0.75], desired=[1, 0, 0, 0])

# below we have prediction for the true class as 0.45.
print CrossEntropy(calculated=[0.45,0.1,0.1,0.9], desired=[1, 0, 0, 0])


result:
1.20397280433
1.20397280433
0.974900121357
0.827953455132
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56335568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档