零基础无理论实战Mnist手写字库模型训练并输出结果

  一直想着要更新博客,但是博主穿梭在秋招的千军万马之中,平日里在公司实习,一有空又得准备笔试,周末又穿梭于各种宣讲会、招聘会之中,最近终于才慢慢地稳定下来,才有时间下来码一篇博客。事实上,也是在纠结要写什么样的博客,做什么样的尝试,才能够写一篇可供自己备份,又能够和网友们进行良好交流的博文,也希望大家能留言,或者加我的微信,交流学习。

   由于实习的原因,现在在做人工智能方面的学习,所以今天给大家带来一个比较新鲜流的东西,也旨在训练自己的知识迁移能力。

  都说Mnist手写字库是人工智能,深度学习的HelloWorld,对它产生了无比的好奇之心,也以为可能就花它个一天两个就能跑得开的事情,那么就动手做吧。当然,首先是去搜索各种各样的学习资料。但是,大多的资料都是这样的(讲一些基础概念、介绍等):

Mnist手写字库

Mnist手写字库

Mnist手写字库

   好吧,虽然写得已经够简单,但是看完之后,又没有操作,程序跑起来似乎也没有得到感性的认知,到底,训练是怎么训练?程序是怎么跑?我该怎样才能够输入一个手写体,然后直接出来一个数字?甚至,我该怎么去应用我所训练好的这个模型,然后供给实际应用,让它可以给其他程序调用,甚至在手机上跑?

  当然,巧妇难为无米之炊,首先,我们得有数据,这个已经是有公开的数据集了,所以我们直接下载就行了。然后,还要有一个模型训练脚本,还有一个预测数的脚本。这个我会打包上传到资源文件供大家下载(页末,为了赚点C币下载东西,没有C币的同学加我微信,我可以免费发给你,见谅)。如下:

资源文件说明

  配置环境的事我就不说了,这里边坑很多,我这里是安装了Anaconda2,然后python35,还有装了Tensorflow、Pillow等模块,这个,大家折腾一下就好了。

  当然,首先肯定是模型训练,打开create_model_2.py,然后,你的数据包下载下来可能是.gz命名的压缩包,这里,你需要把它解压出来,也就是上图所示的.idx3-ubyte,idx1-ubyte形式,关于这个文件的数据格式,建议可以查阅相关博客,有个概念。

  假如你没有解压的话,会出现以下的错误:array is too big,而且数据量惊人,这肯定是有问题的。
array is too big

  在代码的32行,修改地址为自己数据的位置,建议使用相对路径,而且路径不要包含有中文字符。
训练模型

  如果,然后,运行。第一次看控制台打消息会这么激动:
训练模型

  但是,帅不过三秒,等到跑到两20000的时候,就报错了,我的天,这都跑了大半个小时了,到嘴的鸭子就这么飞了。 Parent directory of model2.ckpt dosen’t exist,cant save……
model2.ckpt
  在网上找了一下原因,后来,我补充了这么几句,然后,把原来的注释掉,然后跑去吃饭。
训练模型

  回来后,奇迹发生了,Output里多了几个文件,这就是训练好的模型,供预测使用:
生成模型文件

生成模型文件

打开predict_2.py,然后在97行,导入刚刚训练好的模型。也就是model2.ckpt文件。
预测照片

好了,然后这就可以正常地去预测照片了。我们来试一下吧。
预测照片
  在运行前,添加参数,也可以直接在命令行执行。填入一张图片的地址。这里我的图片在同一目录,所以,就直接写文件名就可以了。确定后,开始执行……

预测照片
预测照片
结果为6:
预测照片

预测照片

  好了,整个调试的过程就是这样。自己操作了整个过程,体验了深度学习流程的操作,还是深深佩服发明深度学习的人。作为学习者,当然我们不能因为畏难就想投机取巧,该走的路还是要走,该埋下头下来啃的东西,还是要慢慢看,慢慢体会,沉下心来学习,才会有进步。这篇博客,虽然含量不高,但是调通一个过程还是大大增强我的学习兴趣,接下来还会进入深入的学习。后期会安排把它应用到安卓平台上边去。做一些比较酷的应用。

加油,共勉!

训练脚本和测试脚本及相关数据下载,没C币同学请联系我微信。