tensorflow中交叉熵损失函数的三种计算方法

tensorflow中交叉熵的三种计算方法
1、交叉熵公式表示为:

H ( p , q ) = − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) H(p,q)=-\sum_{i=1}^{n}p(x_i)log(q(x_i)) H(p,q)=i=1np(xi)log(q(xi))

q ( x i ) q(x_i) q(xi)预测的概率值(softmax之后); p ( x i ) p(x_i) p(xi)真实Y的概率值(一般为one-hot编码)

2、tf.nn.softmax_cross_entropy_with_logits(logits, labels))
logits是神经网络预测值(未经softmax),labels是真实Y的概率值(一般为one-hot编码)

3、tf.nn.sparse_softmax_cross_entropy_with_logits(logits, labels))
logits是神经网络预测值(未经softmax),labels是真实Y的位置码
例子:

import tensorflow as tf

logits = tf.constant([[1, 2, 3], [2, 1, 3], [3, 1, 2]], tf.float64)# batch为3的3分类的神经网络输出
y = tf.nn.softmax(logits)#归一化(转换成概率)
y_ = tf.constant([[0, 0, 1], [0, 1, 0], [0, 0, 1]], tf.float64)#真是Y one-hot
y_sparse = tf.constant([2,1,2], tf.int32)#真是Y的位置码

cross_ent = -tf.reduce_sum(y_ * tf.log(y))
cross_ent2 = tf.reduce_sum(tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=y_))
cross_ent3 = tf.reduce_sum(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y_sparse))

with tf.Session() as sess:
	print('cross_ent: ', sess.run(cross_ent))
	print('cross_ent2: ', sess.run(cross_ent2))
	print('cross_ent3: ', sess.run(cross_ent3))
	print('y: ', sess.run(y))


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值