MNIST的手写数字识别
数据集
- 传统的手写数字的数据集MNIST(http://yann.lecun.com/exdb/mnist/)
- 训练集为60000图片,图片像素为28*28。Images文件中存储图片,label文件中存储对应的数字
- 测试集为10000图片,格式一致
网络结构设计
网络结构为三层神经网络,包括一个输入层,一个输出层,两个隐藏层。输入层为图片的向量形式,长度为784,即输入层包括784个神经元。两个隐藏层的个数分别为200和50。输出层的神经元个数为10个。预测结果从10个神经元的输出中选择最大值所在的位置作为结果。
激活函数的选择
激活函数选择tanh。该函数的特点:
输出在(-1,1)之间,并且在这个范围内tanh的变化最为剧烈,能够很好的将最小的差异变大,从而提高分类准确性
对于三层网络,使用tanh能够保证最后一层的结果的范围仍然较大,而不会被缩减为很小的一个区间。(sigmoid在测试中出现了这样的问题)
表达式
tanh(z) =exp(z)−exp(−z)exp(z) +exp(−x)= 2δ(2z)−1(δsigmoid)tanh′(z)=1−(exp(z)−exp(−z)exp(z) +exp(−x))2=1−tanh2(z) t a n h ( z ) = e x p ( z ) − e x p ( − z ) e x p ( z ) + e x p ( − x ) = 2 δ ( 2 z ) − 1 ( δ s i g m o i d ) t a n h ′ ( z ) = 1 − ( e x p ( z ) − e x p ( − z ) e x p ( z ) + e x p ( − x ) ) 2 = 1 − t a n h 2 ( z )函数和导数图像
损失函数的选择
使用MSE作为最后的误差函数,同时增加了正则化项,减少网络中的参数W的值,具体的公式为
J(W,B)=