其实,在tensorflow的官网中就有用tensorflow实现CNN的教程及源码,但在其教程的开头就有这么一句话“注意:本教程适用于对Tensorflow有丰富经验的用户,并假定用户有机器学习相关领域的专业知识和经验。”而我读完整篇教程后,才发现我也就只理解了这句话的含义,对于Tensorflow如何实现CNN还是一头雾水,即便它也附带了源码,我也不知该如何使用。因此只好另寻他法。直到我在YouTube上搜到了Hvass Laboratories的tensorflow教程,并通过分析实践才对CNN的实现方法,代码结构及用法有了清晰的了解。因此,本教程中的代码也是那位大神写的,我只是拿来重新组织并分析了一下。请注意,通过本教程并不会教你CNN的理论知识,毕竟我没那个水平,就不浪费你的时间了,如果你对CNN不甚了解,可以先去看看CNN的理论知识。
首先介绍一下我运行程序的环境吧,当然并不是一定只有这个环境才能运行,但,建议最好还是能保持一致,这样可以节约你大量的时间和精力。
Python的版本:python3.5.2
系统:Ubuntu16.04
有了以上两点共识,可能遇到的问题就减少了一大半,那剩下的一般就是各种依赖包的安装了,我着实在这方面花费了不少功夫。运行该程序需应用到许多第三方的包,因此,正确的安装好所有用到的包是程序运行的前提,大部分包都比较好安装,有几个值得注意,后面会介绍。
1.什么是CIFAR-10
CIFAR-10是由Alex Krizhevsky, Vinod Nair以及 GeoffreyHinton收集的一个用于普世物体识别的数据集,其中Cifar是加拿大牵头投资的一个先进科学项目研究所。
CIFAR-10数据集包含10个类别的6万张32*32的彩色图片,每个类别6千张。其中5万张是训练集,另外1万张是测试集。下面是数据集中一些数据图形化的结果:
数据集解压后可以看到5个训练用的数据分支和一个测试用的分支:
可以在官网中下载该数据集,当然,后面所给的程序中,会有自动下载的功能。
2.代码结构
本教程的代码可以在我的github上面下载:
https://github.com/lqsherlock/tensorflow-CNN-CIFAR-10
主要包含三个文件:
cifar10-main.py---包含了构建和验证神经网络的代码
cifar10-rescover.py---包含了从保存的检查点中恢复先前训练好的神经网络的代码cifar10.py;download.py;dataset.py;cache.py---一些辅助代码
每个文件里面都包含了大量的注释,尤其是关键的地方还有详细的中文注释。
这个在tensorflow的官网上有详细介绍:
https://www.tensorflow.org/versions/r0.11/get_started/os_setup.html
安装的方式有多种,在这里我只介绍pip的方式,我用的是python3.5,所以对应命令如下:
Export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.11.0-cp35-cp35m-linux_x86_64.whl
pip3install --ignore-installed --upgrade $TF_BINARY_URL
只需以上两步便可
这个包不常用(至少网上相关资料比较少),一开始我打算用anaconda环境,这样大部分包就不用再安装的,但万万没想到anaconda里面没有这个包,而且也无法通过conda命令安装这个包,到是通过pip命令可以安装,而我在网上也没有找到anaconda调用pip所安装的包的方法,因此只能舍弃anaconda了,改用pip安装所需要的包。注意prettytensor依赖tensorflow包(而且版本号是0.9及以上),因此在安装prettytensor之前需先安装tensorflow等包。然后执行如下命令:
Sudo pip3 install prettytensor
该包有一个依赖包tkinter的安装方式比较特别,需要用到apt-get:
sudoapt-get install python3-tk
安装好tkinter后再用pip3 install matplotlib就可以安装好了
该包对于机器学习比较常用,包含了大量机器学习的库,而且调用方便,值得一学。在安装该包之前,需要确保已经安装了numpy,scipy,matplotlib等包,这些都是比较常用的,都可以通过pip3 install命令安装,最后再安装sklearn就好了。
其他的包比较常见,如果出现问题根据提示安装相应的依赖包也好解决。
https://github.com/lqsherlock/tensorflow-CNN-CIFAR-10
如:python3/home/lq/桌面/tensorflow-CNN-CIFAR-10-master/cifar10-main.py (修改成你的路径)
下图是被一些被错误分类的数据
将弹出来的这个图片关闭后,终端便显示这次测试的混淆矩阵
上一节运行的程序是cifar10-main.py中的代码,如果你仔细看过代码后会发现在训练阶段,每训练1000次,就会将当前网络的状态进行保存。那么如何将保存的状态进行恢复呢,这需要用到cifar10-rescover.py中的代码,同样只需要将和上一节一样,修改代码的路径就可以了。
该代码经过150000次迭代后,神经网络的识别率在79%-80%。如果想要进行优化可以从如下几点考虑:
参考链接:
https://www.youtube.com/watch?v=3BXfw_1_TF4&list=PL9Hr9sNUjfsmEu1ZniY0XpHSzl5uihcXZ&index=6
http://www.cs.toronto.edu/~kriz/cifar.html
http://www.tensorfly.cn/
http://m.blog.csdn.net/article/details?id=50738311
http://www.bubuko.com/infodetail-786706.html