CNN基础及环境搭建
Author:王帅;Mail:[email protected]
目前,深度学习在解决图像分类,语音识别等问题上获得了已知的最优结果,该系列算法越来越受到学术界和工业界的重视。何为深度学习?一个直观的解释是如果一个机器学习算法在建模的过程中使用了多层的自动特征表示,则该机器学习算法可以称之为深度学习算法,也就是该机器学习算法可以自动地计算特征的特征表示。而卷积神经网络(以下简称为CNN)则是深度学习中最基础且有效的算法,CNN虽然最早由KunihikoFukushima提出,但是却因YannLeCun和Yoshua Bengio等人的改进实现而为人熟知,据说其实现的LeNet-5至今仍然被用于手写数字的识别(LeNet-5的简单介绍请参考博文blog.csdn.net/xuanyuansen/article/details/41800721)。为什么要提到这两位大牛呢?因为二人目前都是深度学习领域的执牛耳者,YannLeCun目前供职于FaceBook人工智能实验室,而YoshuaBengio仍然在学术界,既然提到了这二位,就不能不提到Google的GeoffreyE.
Hinton和百度的AndrewNg,而Andrew Ng和YoshuaBengio都是Michael I. Jordan的学生,Jordan大神的实验室真可谓是机器学习领域的豪门(豪门盛宴请见www.cs.berkeley.edu/~jordan/sail2010.jpg)。
下面进入正题,目前CNN的开源实现很多,而且随着硬件技术的进步(此处应向Nvidia公司致敬,总裁是华人哦),使用GPU来进行神经网络算法的训练及实现已经成为主流。本文将简单介绍三种基于GPU的开源实现(均在Ubuntu14.04X64环境中成功运行)以及LeNet-5的个人简单实现。三种基于GPU的实现分别是DeepNet,Caffe和Theano,注意DeepNet和Theano均为Python实现,Caffe也大量利用了Python的各种库(其余用C/C++实现)。这三种开源环境均包含了很多机器学习算法(包含深度学习算法),CNN只是其一。GPU计算的基础是Nvidia的CUDA环境,所以先介绍Ubuntu14.04X64环境下的CUDA安装。
CUDA的下载地址在https://developer.nvidia.com/cuda-downloads,安装的步骤请见http://blog.csdn.net/xuanyuansen/article/details/43152311,此处需要特别注意的是要删除Ubuntu系统自带的开源显卡驱动,以及要彻底删除原系统自带的Nvidia相关的包。
一、DeepNet安装
DeepNet的下载地址是https://github.com/nitishsrivastava/deepnet,利用git命令可以直接checkout下来,该源码包的作者是nitishsrivastava(GeoffreyE. Hinton的印度学生),其安装过程按照源码包中的INSTALL.txt说明即可,需要注意的该源码包的演示所用的数据不能用原始的MNIST数据,而要使用经过处理的MNIST数据,下载地址为http://www.cs.toronto.edu/~nitish/deepnet/mnist.tar.gz。其它需要注意的是需确认Ubuntu系统的python环境是否包含了Numpy和Scipy这两个包,如果没有的话需要提前安装。DeepNet实现了六种模型,分别是:Feed-forwardNeural
Nets;RestrictedBoltzmann Machines;DeepBelief Nets;Autoencoders;DeepBoltzmann Machines;ConvolutionalNeural Nets。
二、Caffe安装
Caffe的安装较为复杂,而且坑也比较多(OMG)。Caffe的下载地址为https://github.com/BVLC/caffe,安装的详细过程参见Caffe的官方安装指南http://caffe.berkeleyvision.org/installation.html,以及某位牛人的博客文章(写的非常好)http://www.cnblogs.com/platero/p/3993877.html,关于CUDA安装的部分可以直接略过,这里需要注意的有三个地方,一是IntelMKL的安装,该软件包获得很麻烦,可以直接使用OpenBLAS或者atlas代替(个人使用了OpenBLAS),一定记得在Caffe的配置文件中正确配置该项。二是OpenCV的安装,用原始的源码包会出错,解决方法在:http://code.opencv.org/issues/3814,下载NCVPixelOperations.hpp
替换掉opencv2.4.9内的文件,重新build。三是安装Python的Anaconda包后Caffe编译会出错,解决方法是:删除anaconda/lib/下面的libm,命令为sudo rm -rf libm*(参见博客链接http://blog.csdn.net/ccemmawatson/article/details/42004105)。
Caffe安装好后就可以按照开发文档搭建CNN网络了,参见官方的Tutorial,http://caffe.berkeleyvision.org/tutorial/。
三、Theano安装
Theano的安装非常简单,使用也非常方便,分分钟就可以搞定,文档及下载地址 http://deeplearning.net/software/theano/。基于Theano的CNN模型参见官方的教材,其实现非常方便,地址为http://www.deeplearning.net/tutorial/lenet.html#lenet。
四、LeNet-5的个人简单Python实现(非GPU模式)
利用Python实现了LeNet-5的简单版本,首先是实现了多层神经网络,然后在此基础上实现了CNN,代码参见以下链接(代码中的BMNN2即多层神经网络的实现):
1、http://blog.csdn.net/xuanyuansen/article/details/41544153
2、http://blog.csdn.net/xuanyuansen/article/details/41924377