TensorFlow使用交叉熵函数2

TensorFlow上没有直接可以调用损失函数的库的类,所以需要自己拼装一个损失函数.
在解决深度学习领域一些问题时,交叉熵用于刻画两个概率分布向量之间的距离,是分类问题中使用比较广的一种损失函数.(用于判断概率问题正确值与预测值之间差距)

H ( P , Q ) = − ∑ x P ( x ) l o g Q ( x ) H(P,Q)= -\displaystyle\sum_{x}P(x)logQ(x) H(P,Q)=xP(x)logQ(x)
在使用交叉熵时,一般设定P代表的是正确答案,Q代表的是预测答案
例如在理想情况下,有一个样本属于类别k,这个类别所对应输出节点的输出值应该为1,其他节点的输出都为0
有两个输出结果[0.1,0.8,0.1,0,0,] 和 [0.2,0.5,0.2,0.1,0] ,越靠近1的数,输出节点的输出值为1,那么将这两组答案用交叉熵计算得
H ( P , Q ) = − ( ∑ x 0 H(P,Q)= -(\displaystyle\sum_{x}0 H(P,Q)=(x0 x l o g 0.1 + 1 log0.1+1 log0.1+1x l o g 0.8 log0.8 log0.8 + 0 x l o g 0.1 + 0 log0.1+0 log0.1+0 x l o g 0 + 0 log0 +0 log0+0 x l o g 0 ) ≈ 0.096 log0)\approx0.096 log0)0.096

H ( P , Q ) = − ( ∑ x 0 H(P,Q)= -(\displaystyle\sum_{x}0 H(P,Q)=(x0 x l o g 0.2 + 1 log0.2+1 log0.2+1x l o g 0.5 log0.5 log0.5 + 0 x l o g 0.2 + 0 log0.2+0 log0.2+0 x l o g 0.1 + 0 log0.1 +0 log0.1+0 x l o g 0 ) ≈ 0.3 log0)\approx0.3 log0)0.3

所以选择交叉熵值最小的那个

Tensorflow 中没有计算交叉熵这个类,但是有散装函数

tf.reduce_mean()函数来计算平均值
tf.log()计算对数
tf.clip_by_value()限制一个范围让log()函数的取值在1e-10~1.0之间,保证对数在运算中不会违反运算规则
tf.log(tf.clip_by_value(y,1e-10,1.0))这样log的取值就不会违反对数运算规则

将交叉熵的式子才开来解释 就是 负的数学期望(平均值),样本p*log函数

H_PQ=-tf.reduce_mean(p_*tf.log(tf.clip_by_value(p,1e-10,1.0)))

p_表示标签保存的真实答案向量

注意的是,如果p_是一个矩阵," * "相乘与函数tf.matmul()相乘的区别,使用 " * “相乘是矩阵中对应的元素相乘,而tf.matmul()是矩阵与矩阵相乘.
对于交叉熵计算来说,显然使用” * "相乘的方式更合理,简洁.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值