一、对多分类函数tf.nn.softmax()与交叉熵函数tf.nn.softmax_cross_entropy_with_logits()的认识
这俩函数看着就有关系,前缀都是tf.nn.softmax,那么各自的作用是什么呢?
首先看这俩函数的参数,前者是logits,后者也有个logits,区别是后者多了个labels参数,其中logits参数是输出层的计算结果,
logits = tf.matmul(fc_outputs, weights) + biases ,labels表示预测时,输入样本的标签值。
很明显,后者主要是在训练阶段计算交叉熵的,那么就需要知道计算交叉熵的过程,
其中表示的样本的实际标签值,表示网络的预测值,表示 i 样本的熵,在进行梯度下降之前,处理熵的方式是tf.reduce_sum来计算熵的总和,表征网络输出不确定性的。
二、那么tf.nn.softmax(logits = logits)输出值是什么呢,先看该函数的方程式
softmax() =
从该式中可以看出一个样本的softmax值 ,是在原计算值的基础上进行了上式中的处理,使得该样本输出向量的softmax值加起来等于1,然后从这些值中选出最大的当做最后预测的结果,即第一部分的。
三、经过softmax与梯度下降法的处理后,每隔一段时间就需要输出下当前的预测准确率,那么统计预测准确率的方法是,将预测结果与真是结果进行比对,通过使用tf.equal(tf.argmax(,1),tf.argmax(y,1))函数得到该样本预测的对还是错,其中tf.equal()就不再说了,tf.argmax(y,1)y表示的是实际值,1表示的是横轴,0表示纵轴,举个例子:
当axis = 0时,输出的结果是在纵轴上最大值的index
当axis = 1时,输出的结果是在横轴上最大值的index
因为我们的输出值的矩阵形式M*N,其中M表示样本数,N表示类别数,则axis =1就是必然的了。