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)