对CNN网络的计算流程的简单梳理

       一、对多分类函数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表示预测时,输入样本的标签值。

          很明显,后者主要是在训练阶段计算交叉熵的,那么就需要知道计算交叉熵的过程,

                                                                    H_{{y}'}(y) = -\sum_{i}^{ }y_{i}^{'}log(y_{i})

其中y_{i}^{'}表示的样本的实际标签值,y_{i}表示网络的预测值,H_{{y}'}(y)表示 i 样本的熵,在进行梯度下降之前,处理熵的方式是tf.reduce_sum来计算熵的总和,表征网络输出不确定性的。

    二、那么tf.nn.softmax(logits = logits)输出值是什么呢,先看该函数的方程式

                                                              softmax(x_{i}) = \frac{exp(x_{i})}{\sum _{n}exp(x_{n})} 

从该式中可以看出一个样本的softmax值 ,是在原计算值的基础上进行了上式中的处理,使得该样本输出向量的softmax值加起来等于1,然后从这些值中选出最大的当做最后预测的结果,即第一部分的y_{i}

    三、经过softmax与梯度下降法的处理后,每隔一段时间就需要输出下当前的预测准确率,那么统计预测准确率的方法是,将预测结果与真是结果进行比对,通过使用tf.equal(tf.argmax(y_{i},1),tf.argmax(y,1))函数得到该样本预测的对还是错,其中tf.equal()就不再说了,tf.argmax(y,1)y表示的是实际值,1表示的是横轴,0表示纵轴,举个例子:

 当axis = 0时,输出的结果是在纵轴上最大值的index

                       对CNN网络的计算流程的简单梳理_第1张图片

 当axis = 1时,输出的结果是在横轴上最大值的index

                       对CNN网络的计算流程的简单梳理_第2张图片

因为我们的输出值的矩阵形式M*N,其中M表示样本数,N表示类别数,则axis =1就是必然的了。

你可能感兴趣的:(tensorflow)