交叉熵基本概念
参考:https://www.jianshu.com/p/47172eb86b39
参考链接:https://www.jianshu.com/p/47172eb86b39
如何计算多分类交叉熵
在机器学习中,将ground truth当作一个分布(P),将预测作为另一个分布(q),假设有cnum个类别(三分类问题cnum=3, 四分类问题cnum=4),那么就有:
H ( p , q ) = − ∑ i = 1 c n u m p ( c i ) log q ( c i ) H(p, q)=-\sum_{i=1}^{cnum} p\left(c_{i}\right) \log q\left(c_{i}\right) H(p,q)=−∑i=1cnump(ci)logq(ci)
例子:
假设有一个三分类问题,某个样例的正确答案是(1,0,0)。某模型经过Softmax回归之后的预测答案是(0.5,0,4,0.1),那么这个预测和正确答案直接的交叉熵是:
H
(
(
1
,
0
,
0
)
,
(
0.5
,
0.4
,
0.1
)
)
=
−
(
1
×
log
0.5
+
0
×
log
0.4
+
0
×
log
0.1
)
≈
0.3
\mathrm{H}((1,0,0),(0.5,0.4,0.1))=-(1 \times \log 0.5+0 \times \log 0.4+0 \times \log 0.1) \approx 0.3
H((1,0,0),(0.5,0.4,0.1))=−(1×log0.5+0×log0.4+0×log0.1)≈0.3
如果另外一个模型的预测是(0.8,0.1,0.1),那么这个预测值和真实值的交叉熵是:
H
(
(
1
,
0
,
0
)
,
(
0.8
,
0.1
,
0.1
)
)
=
−
(
1
×
log
0.8
+
0
×
log
0.1
+
0
×
log
0.1
)
≈
0.16
\mathrm{H}((1,0,0),(0.8,0.1,0.1))=-(1 \times \log 0.8+0 \times \log 0.1+0 \times \log 0.1) \approx 0.16
H((1,0,0),(0.8,0.1,0.1))=−(1×log0.8+0×log0.1+0×log0.1)≈0.16
从直观上可以很容易知道第二个答案要优于第二个。通过交叉熵计算得到的结果也是一致的(第二个交叉熵的值更小)。
-----------------------------------------------------------------------------------------------------华丽的分割线--------------------
深入理解交叉熵函数及其在tensorflow和keras中的实现
https://www.cnblogs.com/hutao722/p/9761387.html
---------------------------分割线---------------------
参考:https://www.jianshu.com/p/47172eb86b39
由于sparse_softmax_cross_entropy_with_logits 不采用one_hot编码,所以不能体现多分类的概率分布 (只能指定为某一个类别,而不能体现为[0.2,0.7,0.1]这样的概率分布)