tensorflow实战:MNIST手写数字识别的优化2-代价函数优化,准确率98%

tensorflow实战:MNIST手写数字识别的优化2-代价函数优化,准确率98%

MNIST 是一个TensorFlow入门级的计算机视觉数据集,

最简单的tensorflow的手写识别模型,这一节我们将会介绍其简单的优化模型。我们会从代价函数,多层感知器,防止过拟合,以及优化器的等几个方面来介绍优化过程。

1.代价函数的优化:

我们可以这样将代价函数理解为真实值与预测值的差距,我们神经网络训练的目的就是调整W,b等参数来让这个代价函数的值最小。上一节我们用到的是二次代价函数:

在TensorFlow中的实现为:loss = tf.reduce_mean(tf.square(y-prediction)),但是这个代价函数会带来一定的问题,比如说刚开始学习的会很慢。我们知道神经网络的学习是通过梯度的反向传播来更新参数W,b的:

但是我们的sigmoid激活函数为:

当z很大的时候,例如在B点时,σ'(z)即改点切线的斜率将会很小,导致W,b的梯度很小,神经网络更新的将会很慢。为了解决这个问题,这一节我们将会引入交叉熵代价函数:

其中C为代价函数,x为样本,y为实际值,a为预测值,n为样本总数。

我们先来观察一下这个代价函数:

当实际值y=1时,C= -1/n *∑ylna,    此时当a->1时,C->0    ,当a->0时C->无穷大

当实际值y=0时,C=-1/n *∑ln(1-a)  此时当a->1时,C->无穷大  ,当a->0时C