2、tensorflow--交叉熵cross_entropy的两种实现方式

交叉熵多用于分类问题,在分类问题中的效果很好。下面介绍tensorflow中两种交叉熵的实现方式:

首先介绍几个概念 :   logits: 未归一化的概率, 一般也就是 softmax层的输入

softmax:可以理解为一个归一化函数,在计算交叉熵之前都要用此函数进行激活

cross_entropy:交叉熵

交叉熵两种方式来实现:1、tf.nn.softmax_cross_entropy_with_logits           2、-tf.reduce_sum(y_*tf.log(y))

代码:

import tensorflow as tf  
  
#our NN's output  logits为输出层输出
logits=tf.constant([[1.0,2.0,3.0],[1.0,2.0,3.0],[1.0,2.0,3.0]])  
#step1:do softmax  
y=tf.nn.softmax(logits)  
#true label  y_为训练集标签
y_=tf.constant([[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0]])  
#step2:do cross_entropy    两种交叉熵实现方式
cross_entropy = -tf.reduce_sum(y_*tf.log(y))  
#do cross_entropy just one step  
cross_entropy2=tf.reduce_sum(tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=y_))#dont forget tf.reduce_sum()!!  
  
with tf.Session() as sess:  
    softmax=sess.run(y)  
    c_e = sess.run(cross_entropy)  
    c_e2 = sess.run(cross_entropy2)  
    print("step1:softmax result=")  
    print(softmax)  
    print("step2:cross_entropy result=")  
    print(c_e)  
    print("Function(softmax_cross_entropy_with_logits) result=")  
    print(c_e2)

 

posted @ 2019-10-08 16:37  Andy_George  阅读(672)  评论(0编辑  收藏  举报