JS技术

手把手入门神经网络系列(2)_74行代码实现手写数字识别 - 寒小阳 - 博客频道 - CSDN.NET 寒小阳 专注机(5)

字号+ 作者:H5之家 来源:H5之家 2015-12-14 16:23 我要评论( )

结果如下: Epoch 0 : 790 / 10000 Epoch 1 : 846 / 10000 Epoch 2 : 854 / 10000 Epoch 3 : 904 / 10000 Epoch 4 : 944 / 10000 Epoch 5 : 975 / 10000 Epoch 6 : 975 / 10000 Epoch 7 : 975 / 10000 Epoch 8 : 97

结果如下:

Epoch 0: 790 / 10000 Epoch 1: 846 / 10000 Epoch 2: 854 / 10000 Epoch 3: 904 / 10000 Epoch 4: 944 / 10000 Epoch 5: 975 / 10000 Epoch 6: 975 / 10000 Epoch 7: 975 / 10000 Epoch 8: 975 / 10000 Epoch 9: 974 / 10000 Epoch 10: 974 / 10000 Epoch 11: 974 / 10000 Epoch 12: 974 / 10000 Epoch 13: 974 / 10000 Epoch 14: 974 / 10000 Epoch 15: 974 / 10000 Epoch 16: 974 / 10000 Epoch 17: 974 / 10000 Epoch 18: 974 / 10000 Epoch 19: 976 / 10000 Epoch 20: 979 / 10000 Epoch 21: 981 / 10000 Epoch 22: 1004 / 10000 Epoch 23: 1157 / 10000 Epoch 24: 1275 / 10000 Epoch 25: 1323 / 10000 Epoch 26: 1369 / 10000 Epoch 27: 1403 / 10000 Epoch 28: 1429 / 10000 Epoch 29: 1451 / 10000

呃,发现准确率同样低得不忍直视。但是有一个优点,准确率是稳步提升的。说明模型在大方向上应该还是对的。如果在调试模型的时候忽视了这个细节,你可能真的找不到合适的参数。

可见,我们第一次尝试的神经网络结构的超参数设定还是比较不错的。但是真实的应用场景中,基本没有这样好的运气,很可能刚开始测试出来的结果全是奇葩生物,长得违反常理,就像来自另一个次元似的。这是数据挖掘工程师常见的情况。此时最应该做的,就是遏制住心中数万草泥马的咆哮奔腾,静静地观察测试结果的分布规律,尝试找到些原因,再继续将模型试着调优下去,与此同时,做好从一个坑跳入下一个坑的心理准备。当然,在机器学习工程师前赴后继的填坑过程中,还是总结出了一些调优规律。我们会在接下来专门写博文分析。

当然,以上的调优都没有逃出神经网络模型本身的范围。但是可不可能其他的模型效果更好?比如传说中的支持向量机?关于支持向量机的解读已经超越了本文的篇幅,我们也考虑专门撰写博文分析。但是在这里我们只是引用一下在scikit-learn中提供好的接口,底层是用性能更好的C语言封装的著名的LIBSVM。

相关代码也在Michael Nielsen的文件中。直接引入,并运行一个方法即可。

import mnist_svm mnist_svm.svm_baseline()

我们看看结果:

Baseline classifier using an SVM. 9435 of 10000 values correct.

94.35%,好像比我们的神经网络低一点啊。看来我们的神经网络模型还是更优秀一些?

然而,实际情况并非如此。因为我们用的只是scikit-learn给支持向量机的设好的默认参数。支持向量机同样有一大堆可调的超参数,以提升模型的效果。 跟据 Andreas Mueller的这篇博文,调整好超参数的支持向量机能够达到98.5%的准确度!比我们刚才最好的神经网络提高了1.8个百分点!

然而,故事并没有结束。2013年,通过深度神经网络,研究者可以达到99.79%的准确度!而且,他们并没有运用很多高深的技术。很多技术在我们接下来的博文中都可以继续介绍。

所以,从目前的准确度来看:

简单的支持向量机<浅层神经网络<调优的支持向量机<深度神经网络

但还是要提醒一下,炫酷的算法固然重要,但是良好的数据集有时候比算法更重要。Michael Nielsen专门写了一个公式来来表达他们的关系:

精致的算法 ≤ 简单的算法 + 良好的训练数据
sophisticated algorithm ≤ simple learning algorithm + good training data.

所以为了调优模型,往往要溯源到数据本身,好的数据真的会有好的结果。

8、小结与下期预告

以上我们只是粗略地展示了用神经网络分析问题的基本过程,很多深入的内容并没有展开。我们将会在接下来的博文中进行深入探讨。

在该系列下一篇博文中,我们试图直接探讨深度神经网络的表现能力,并提供一个启发式理解。敬请关注。

  • 上一篇深度学习与计算机视觉系列(4)_最优化与随机梯度下降
  • 顶 0 踩 0

    我的同类文章

    猜你在找

    查看评论

    * 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

    个人资料


    yaoqiang2011

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • 零基础入门学习Python(10):函数 - qq_33256568的博客 - 博客频道 - CSDN.NET qq_3

      零基础入门学习Python(10):函数 - qq_33256568的博客 - 博客频道

      2015-12-15 09:04

    • 手把手入门神经网络系列(2)_74行代码实现手写数字识别 - 龙心尘 - 博客频道 - CSDN.NET 龙心尘 目录视

      手把手入门神经网络系列(2)_74行代码实现手写数字识别 - 龙心尘 - 博

      2015-12-14 16:29

    • 2015年最新Android基础入门教程目录(完结版) - coder-pig的猪栏 - 博客频道 - CSDN.NET

      2015年最新Android基础入门教程目录(完结版) - coder-pig的猪栏 - 博

      2015-12-14 15:12

    • 【OpenCV入门教程之三】 图像的载入,显示和输出 一站式完全解析 - 【C++游戏编程】微软最有价值专家—毛星云(浅

      【OpenCV入门教程之三】 图像的载入,显示和输出 一站式完全解析 -

      2015-12-13 10:14

    网友点评