对于tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.argmax(y_,1))的研究

1.对于tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.argmax(y_,1))的拆解

        其实这个函数可以分为两个函数,即:softmax 和 cross entropy

2.对于softmax函数的理解

        这个其实是比较好理解的,对于神经网络前向传播的输出层为多维时,也就是在研究分类问题时,我们的label一般定为1行M列的数组L,如果样本是c类,那么就令L[c] = 1 ,其他的都为0。但是我们的前向传播的输出层输出的数组L'可不会乖乖的长成L的模样,这个L'一般是M个float数,c'越贴近于1,就说明模型识别样本为c'类。

但是对于交叉熵来说:

对于tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.argmax(y_,1))的研究_第1张图片

对于tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.argmax(y_,1))的研究_第2张图片 也就是说,对于交叉熵来说,他用到的L'[]中,必须都是概率的形式,也就是加起来得是1,所以就需要用到softmax函数,他能将L'中的所有值转化为概率的形式。另外使用softmax_cross_entropy函数可以解决Mean_Squred_Error(均方误差)刚开始训练时,效率较低的问题。

3.对于cross entropy的理解

        这里就主要对二分类公式和多分类公式进行有效区分就可以了。

        交叉与熵的意思:明眼人能看出来,这个交叉熵中的交叉其实体现在不同类的真实值 * ln(p)相加,交叉就是不同类的意思。熵不太清楚,可能跟对p加ln有关。

        二分类与多分类的理解:

              我们将两个公式简化来看:

                二分类:对于二分类来说,加和的过程其实是对预测正确率的加和。

                多分类:对于多分类来说也是一样的,先看c是几时是1,然后把对应的ln[pi]累加。

4.对于代码的理解:

ce = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.argmax(y_,1))
cem = tf.reduce_mean(ce)
loss = cem + tf.add_n(tf.get_collection('losses'))

其中,logits里传入的是L'[],被softmax调整之后就是p[],labels传入的是索引c,也就是累加加起来的是ln(p[c])。ce就是一个和,reduce_mean求均值,loss使用正则化,后面再加上每个w的权重。

5.对于loss求导求loss的最小值的研究:

  其中很明显,根据交叉熵的公式,L是关于p的函数,但是p是由s(score 即前项传播的输出值)通过softmax函数求出来的,故这是一个复合函数,s又是由w通过前项传播的矩阵运算得出来的,所以得上式。

  如果参数w只有一个的话,计算应该是在大学所学范围内,但是大部分的网络中,参数都是有很多的,故由现有知识是得不出来那个最优值点的。但由此可以看出,在tensorflow 的训练过程中,函数minmize(loss)的原理应该就是不断的求偏导去找loss的最优值。

 

你可能感兴趣的:(Tensorflow,tensorflow)