对于分类问题的误差,我们一般采用计算交叉熵的方法。
交叉熵(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 tens