版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014453898/article/details/81559462
一,交叉熵的原理:
交叉熵是用来衡量两个 概率分布 的距离(也可以叫差别)。[概率分布:即[0.1,0.5,0.2,0.1,0.1],每个类别的概率都在0~1,且加起来为1]。
若有两个概率分布p(x)和q(x),通过q来表示p的交叉熵为:(注意,p和q呼唤位置后,交叉熵是不同的)
只要把p作为正确结果(如[0,0,0,1,0,0]),把q作为预测结果(如[0.1,0.1,0.4,0.1,0.2,0.1]),就可以得到两个概率分布的交叉熵了,交叉熵值越低,表示两个概率分布越靠近。
交叉熵计算实例:
假设有一个三分类问题,某个样例的正确答案是(1,0,0),某个模型经过softmax回归之后的预测答案是(0.5,0.4,0.1),那么他们的交叉熵为:
如果另一个模型的预测概率分布为(0.8,0.1,0.1),则这个预测与真实的交叉熵为:
由于0.1小于0.3,所以第二个预测结果要由于第一个。
二,使用交叉熵的背景:
通过神经网络解决分类问题时,一般会设置k个输出点,k代表类别的个数,如下图:
每个输出结点,都会输出该结点对应类别的得分,如[cat,dog,car,pedestrian] 为[44,10,22,5]
但是输出结点输出的是得分,而不是概率分布,那么就没有办法用交叉熵来衡量预测结果和真确结果了,那怎么办呢,解决方法是在输出结果后接一层 softmax,softmax的作用就是把输出得分换算为概率分布。
三,用tensorflow实现交叉熵:
在tensorflow中,有交叉熵的接口,由于交叉熵一般会与softmax一起使用,所以tensorflow对这两个功能进行了统一封装。
接口为:
corss_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=y_,logits=y)
其中,y_为标准答案结果,y为网络输出的预测结果。