【分享帖】一小时搞定手写数字识别
![XJTU DJI CLUB](https://hz-rm-bbs-web-prod.oss-cn-hangzhou.aliyuncs.com/avatar/pre/v1/000009837_avatar_big.jpg)
一小时搞定手写数字识别
孟国涛西安交通大学RoboMasters机器人队视觉组
我也可耻的做一回标题党。。。
不过因为手写数字识别是个经典问题,解决方案很多,网上资源也非常多,只要网络没什么问题,确实一个小时就可以搞定。
起初看到大符是手写数字识别,心里小激动了一下,毕竟对于我们这样自诩要做人工智能,但是实际造出来的都是人工智障的人来说,这是一个最经典的问题,我想是很多人做机器视觉和深度学习的启蒙项目吧。1989年Lecun(膜拜)用卷积神经网络做手写数字识别的问题,效果秒杀之前所有方法。用的数据集是用USPS里面的信件上的大家写的邮编的数字,就是大名鼎鼎的MNIST数据集,我们这次大符用的也是这个数据集。
这回用的手写数字识别的方法就是CNN啦,卷积神经网络,这里用的是一个非常简单的CNN,只有两个卷基层。如果对卷积神经网络和机器学习不大了解的同学,可以看下Andrew Ng的UFLDL,周志华老师的《机器学习》,也可以看看斯坦福李飞飞的公开课,这些都是经典的参考资料。用的深度学习的平台呢,是我见过的最简单实用的Keras,Keras是一个使用Python写代码的机器学习平台,运行在Theano或者TensorFlow之上,简单来说就像是给Theano或者TensorFlow写了一个简单好用的API,你不需要懂计算图啊什么的概念,就可以搭建自己的神经网络。有人担心Python代码运行效率的问题,这个担心非常好,Keras上的运行速度却是会慢一点,但是因为编写和理解代码实在简单,所以是一个做prototype和学习的优秀平台。而且对于一些同学非常有利的一点是Keras有一个中文的官网,但是据我观察中文官网更新有点慢,英文没问题的话还是看英文的官网吧。
现在我们开始做我们的手写数字识别,那一小时可以从现在开始计时(滑稽)···
首先装一个keras,我用Ubuntu,安装很简单,做深度学习很多项目都是Linux上的,所以建议大家使用Linux作为自己的OS。
因为Keras是基于Theano或者TensorFlow的,所以安装Keras前要安装TensorFlow或者Theano,现在Keras官方已经默认使用TensorFlow了,所以我推荐使用TensorFlow。这部分我就不描述了,总之就是打开终端,无脑按照顺序复制命令,就可以完成。我这里给出两个链接,按照这两个链接安装,记得依赖的库也要安装哦。
用GPU的话安装会麻烦一点,涉及到Nvidia驱动和Cuda还有Cudnn的安装,用CPU的话就很简单了,我建议有N卡的最好用GPU,速度不是一般的快。
TensorFlow:https://www.tensorflow.org/install/(可能需要翻个墙)
现在我们安装完成了,你可以在Python里面import keras试一下。
下面我们开始看代码啦,这里是Python代码,简单读。因为手写数字识别实在太经典,所以我们在Keras 的example里面就可以找到mnist_cnn.py,所以这里的代码都不是我写的,就是官方的例子啦,,其实你把这个文件直接运行就好。以下我只是简单解释一下,我写的注释就用绿色的字了。其实各位可以不必细究代码里面的细节,学过CNN的自然一看就懂,没接触过的呢,就把CNN当做一个神奇的黑箱子,你把照片给它,他告诉你这是啥,至于中间怎么搞的,可以先不管,毕竟我们只有一个小时嘛~这个黑箱子不能直接使用,要经过一番训练,以下的代码就是这个黑箱子生成的过程。
//太长了超过限制,客官请继续看楼下(这一句是萌萌主页君的注释)
请问这篇文章对你有用吗?
【分享帖】一小时搞定手写数字识别