通过神经网络解决多分类问题最常用的方法是设置n个输出节点,其中n为类别的个数,对每一个样例,神经网络都会得到一个n维数组作为输出结果,每一个维度对应一个类别,那么如何判断一个输出向量和期望向量有多近呢?交叉熵(cross entropy)是常用的评判方法之一,交叉熵刻画了两个概率分布之间的距离。
交叉熵刻画的是两个概率分布之间的距离,但是神经网络的输出却不一定是一个概率分布,所以通常使用Softmax对神经网络得到的结果处理,Softmax的回归参数被去掉了,它只是一层额外的处理层,将神经网络的输出变成一个概率分布。
代码示例:
#tf.clip_by_value 可以将一个张量中的数值限制在一个范围 这里限制范围避免log0的出现
cross_entropy =-tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10,1.0)))
因为交叉熵一般会与softmax一起使用,所以Tensorflow对两个功能进行了统一封装
#实现了softmax回归之后的交叉熵损失函数
cross_entropy=tf.nn.softmax_cross_entropy_with_logits(labels=y_,logits=y)
#在只有一个正确答案的分类问题中使用tf.nn.sparse_softmax_cross_entropy_with_logits()可以进一步加速计算过程