二层神经网络准确率一直只有88%左右

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二层神经网络准确率一直只有88%左右相关的知识,希望对你有一定的参考价值。

参考技术A 最近在写两层神经网络识别手写数字问题时,一直调参发现准确率只有88%左右,但是别人的随便给几个参数都能达到95%,心态爆炸。我训练出来的神经网络都长这个样子。

这里只是输出了前面的一部分。看起来就一点不像能正确分类的样子(默默觉得88%已经是太好的结果了。。。)

后来对比cs231n的作业,发现自己的神经网络在进行learning_rate调整时,是每个iteration都进行调整了,而不是每个epoch,也就是说learning_rate到后面太小了,导致神经网络崩坏。于是我将learning_rate_decay从原来的0.95调整到0.99995后,发现训练结果好了很多,准确率直接达到了96%。当然啦,不需要调整learning_rate_decay,直接改为每个epoch调整就行了。

(至少长得不像上面那样一团噪音了。。。)

旋转图片,增加神经网络的准确率

前面我们用全量mnist数据集测试的准确率大概在75%左右,当然是没有经过改进之前的测试。

技术图片

而我们用少量mnist数据集测试的准确率只有60%左右。两个的区别在于mnist训练数据集的大小,如果我们在全量数据集的基础上在增加新的图片会不会提高准确率呢。下面我们试下通过旋转已知图片的方法看准确率是否有增加。

1.训练

在训练的过程中旋转图片,再训练新的图片。

inputs_plusx_img = scipy.ndimage.interpolation.rotate(input_list.reshape(28,28), 10, cval=0.01, order=1, reshape=False)
mnist.train(inputs_plusx_img.reshape(784), target_list)
# rotated clockwise by x degrees
inputs_minusx_img = scipy.ndimage.interpolation.rotate(input_list.reshape(28,28), -10, cval=0.01, order=1, reshape=False)
mnist.train(inputs_minusx_img.reshape(784), target_list)

分别为增加10度和减少10度

2.测试

测试步骤和前面的一样,测试结果为:

技术图片

 

 和上面的结果对比,此次的准确率最低都为83.1%,可以说是提高了一大截。

代码地址为:https://github.com/pythonAndAI/nerve-net/blob/master/com/test/otherExercises/mnistrotate.py

 





以上是关于二层神经网络准确率一直只有88%左右的主要内容,如果未能解决你的问题,请参考以下文章

为啥神经网络的准确性不好?

神经网络和深度学习笔记 - 第五章 深度神经网络学习过程中的梯度消失问题

运用SGD提高网络性能

构建ResNet卷积神经网络

CNN 训练准确率在训练期间变得更好,但测试准确率保持在 40% 左右

实现手写数字识别(数据集50000张图片)比较3种算法神经网络灰度平均值SVM各自的准确率—Jason niu