在本站的这篇文章《TensorFlow实现简单神经网络》中,我们用TensorFlow实现了对MINST手写数字集的分类,分类的准确率达到了91%,本文中将优化此神经网络,将准确率提升至98%以上。
1 优化思路
对神经网络进行优化时,可以采取的思路主要有以下几种:
- 合适的损失函数
- 合适的激活函数
- 合适的优化器
- 神经网络的层数
- 学习率的设置
- 处理过拟合问题
- 增大训练样本量、训练轮次
本例中,交叉熵函数比二次代价函数更适合作为损失函数,激活函数采用了tanh()函数,优化器选用了Adam函数。
神经网络的层数并不是越多越好(太复杂的神经网络解决数据量较小的问题极易出现过拟合现象),本例中设置了两层中间层。
设置学习率时,学习率太大会导致参数的值不停摇摆,而不会收敛到一个极小值,太小又会大大降低优化速度,所以我们可以先使用一个较大的学习率来快速得到一个比较优的解,然后随着迭代的继续逐步减小学习率,使得模型在训练后期更加稳定。
为防止过拟合问题,本例中使用了dropout机制。
在深度学习中,增大训练样本量可以使很多问题迎刃而解,但在本例中并不适用,因为本例已经使用了MNIST的全部训练数据。但是可以增加训练轮次,本例中将上文的21次提升到了51次。
好了,来敲敲代码看疗效吧~
2 代码及说明
1 | import tensorflow as tf |
3 结果
1 | Iter 0,Testing Accuracy 0.956,Training Accuracy 0.95829093 |
可以看出,在训练了51轮后,测试数据的准确率已经达到了98.4%,训练数据的准确率达到了100% 。
4 参考资料
[1]@Bilibili.深度学习框架Tensorflow学习与应用.2018-03
[2]郑泽宇,梁博文,顾思宇.TensorFlow:实战Goole深度学习框架(第2版)[M].北京:电子工业出版社.2018-02