【实验】TensorFlow实现交叉熵

对于分类问题的误差,我们一般采用计算交叉熵的方法。
交叉熵(Cross Entropy)损失函数公式:
在这里插入图片描述

基于TensorFlow函数手工实现交叉熵

import tensorflow as tf

 

def entropy_func(y,y_hat):

    #参数y是分类问题的真实标签,one-hot编码后的nX1矩阵;y_hat是预测的标签,softmax的结果

   
softmax_data = tf.placeholder(tf.float32)

   
onehot_data = tf.placeholder(tf.float32)

    

   
loss = (-1) *
tf.reduce_sum(tf.multiply(onehot_data,tf.log(softmax_data)))

   
#tf.reduce_sum()函数输入一个序列,返回它们的和

   
#tf.log()函数返回所输入值的自然对数

   
cross_entropy = tf.cast(loss,dtype=tf.float32)

   
with tf.Session() as sess:

       
output =
sess.run(cross_entropy,feed_dict={softmax_data:y_hat,onehot_data:y})

    

   
return output

 

y = [1.0,0.0,0.0]

y_hat = [0.659,0.242,0.099]

entropy_func(y,y_hat)

结果:

0.41703176

基于TensorFlow中交叉熵API接口实现

import tensorflow as tf

 

def entropy_api(y,y_hat):

#参数y是分类问题的真实标签,one-hot编码后的nX1矩阵;y_hat是预测的标签,logits的结果
	
	   
	logits_data = tf.placeholder(tf.float32)
	
	   
	onehot_data = tf.placeholder(tf.float32)
	
	   
	cross_entropy =
	tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits_data,labels=y))
	
	   
	with tf.Session() as sess:
	
	       
		output = sess.run(cross_entropy,feed_dict={logits_data:y_hat,onehot_data:y})
	
	    
	
	return output

 

y_hat = [1.2,0.9,0.4]

y = [1,0,0]

entropy_api(y,y_hat)

结果:
0.78396875
注意,API接口中的参数是logits结果,不是softmax。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值