深度学习框架比较,Caffe/Tensorflow/ Keras有何不同?
时间:18/05/31

导语:Science is NOT a battle, it is a collaboration. We all build on each other’s ideas. Science is an act of love, not war. Love for the beauty in the world that surrounds us and love to share and build something together. That makes science a highly satisfying activity, emotionally speaking! ——Yoshua Bengio

 

人工智能的浪潮正席卷全球,诸多词汇时刻萦绕在我们的耳边,如人工智能,机器学习深度学习等。“人工智能”的概念早在1956年就被提出,顾名思义用计算机来构造复杂的,拥有与人类智慧同样本质特性的机器。经过几十年的发展,在2012年后,得益于数据量的上涨,运算力的提升和机器学习算法(深度学习)的出现,人工智能开始大爆发。但目前的科研工作都集中在弱人工智能部分,即让机器具备观察和感知能力,可以一定程度的理解和推理,预期在该领域能够取得一些重大突破。电影里的人工智能多半都是在描绘强人工智能,即让机器获得自适应能力,解决一些之前还没遇到过的问题,而这部分在目前的现实世界里难以真正实现。

 

若人工智能有希望取得突破,是如何实现的,“智能”又从何而来呢?这主要归功于一种实现人工智能的方法——机器学习。

 

一、机器学习概念

机器学习一种实现人工智能的方法。

 

机器学习最基本的做法是,使用算法来解析数据从中学习,然后对真实世界中的事件做出决策和预测。与传统的为解决特定任务、硬编码的软件程序不同,机器学习是用大量的数据来“训练”,通过各种算法从数据中学习如何完成任务。机器学习源于早期的人工智能领域,传统的算法包括决策树、聚类、贝叶斯分类、支持向量机、EM、Adaboost等等。从学习方法上来分,机器学习算法可以分为监督学习(如分类问题)、无监督学习(如聚类问题)、半监督学习、集成学习、深度学习和强化学习。

 

传统的机器学习算法在指纹识别、基于Haar的人脸检测、基于HoG特征的物体检测等领域的应用基本达到了商业化的要求或者特定场景的商业化水平,但每前进一步都异常艰难,直到深度学习算法的出现。

 

二、深度学习概念

深度学习是一种实现机器学习的技术。

 

其本身并不是一种独立的学习方法,也会用到有监督和无监督的学习方法来训练深度神经网络。但由于近几年该领域发展迅猛,一些特有的学习手段相继被提出(如残差网络),因此越来越多的人将其单独看作一种学习的方法。

 

最初的深度学习是利用深度神经网络来解决特征表达的一种学习过程。深度神经网络本身并不是一个全新的概念,可大致理解为包含多个隐含层的神经网络结构。为了提高深层神经网络的训练效果,人们对神经元的连接方法和激活函数等方面做出相应的调整。其实有不少想法早年间也曾有过,但由于当时训练数据量不足、计算能力落后,因此最终的效果不尽如人意。深度学习,作为目前最热的机器学习方法,但并不意味着是机器学习的终点。起码目前存在以下问题:

1、深度学习模型需要大量的训练数据,才能展现出神奇的效果,但现实生活中往往会遇到小样本问题,此时深度学习方法无法入手,传统的机器学习方法就可以处理;

2、有些领域,采用传统的简单的机器学习方法,可以很好地解决了,没必要非得用复杂的深度学习方法;

3、深度学习的思想,来源于人脑的启发,但绝不是人脑的模拟。

 

因此,机器学习框架和深度学习框架之间也是有区别的。本质上,机器学习框架涵盖用于分类,回归,聚类,异常检测和数据准备的各种学习方法,也可以包括神经网络方法。深度学习或深度神经网络(DNN)框架涵盖具有许多隐藏层的各种神经网络拓扑,包括模式识别的多步骤过程。网络中的层越多,可以提取用于聚类和分类的特征越复杂。常见的Caffe,CNTK,DeepLearning4j,Keras,MXNet和TensorFlow是深度学习框架。 而Scikit-learning和Spark MLlib是机器学习框架。 Theano则跨越了这两个类别。

 

本文接下来的篇幅将会重点介绍深度学习的三个框架caffe、tensorflow和keras,如果只是需要使用传统的机器学习基础算法使用scikit-learning和spark MLlib则更为合适。

 

三、深度学习框架比较

神经网络一般包括:训练,测试两大阶段。训练就是把训练数据和神经网络模型(AlexNet、RNN等神经网络训练框架Caffe等)用CPU或GPU提炼出模型参数的过程。测试就是把测试数据用训练好的模型(神经网络模型+模型参数)运行后查看结果。而caffe,keras,tensorflow就是把训练过程所涉及的环节数据统一抽象,形成可使用框架。

 

(一)Caffe

1、概念

Caffe是一个清晰而高效的深度学习框架,也是一个被广泛使用的开源深度学习框架,在Tensorflow出现之前一直是深度学习领域Github star最多的项目。主要优势为:上手容易,网络结构都是以配置文件形式定义,不需要用代码设计网络。训练速度快,组件模块化,可以方便的拓展到新的模型和学习任务上。但是Caffe最开始设计时的目标只针对于图像,没有考虑文本、语音或者时间序列的数据,因此Caffe对卷积神经网络的支持非常好,但是对于时间序列RNN,LSTM等支持的不是特别充分。Caffe工程的models文件夹中常用的网络模型比较多,比如Lenet、AlexNet、ZFNet、VGGNet、GoogleNet、ResNet等。

 

2、Caffe的模块结构

Caffe由低到高依次把网络中的数据抽象成Blob, 各层网络抽象成Layer ,整个网络抽象成Net,网络模型的求解方法抽象成Solver。

 

1.Blob表示网络中的数据,包括训练数据,网络各层自身的参数,网络之间传递的数据都是通过Blob来实现的,同时Blob数据也支持在CPU与GPU上存储,能够在两者之间做同步。

 

2.Layer是对神经网络中各种层的抽象,包括卷积层和下采样层,还有全连接层和各种激活函数层等。同时每种Layer都实现了前向传播和反向传播,并通过Blob来传递数据。

 

3.Net是对整个网络的表示,由各种Layer前后连接组合而成,也是所构建的网络模型。

 

4.Solver 定义了针对Net网络模型的求解方法,记录网络的训练过程,保存网络模型参数,中断并恢复网络的训练过程。自定义Solver能够实现不同的网络求解方式。

 

3、安装方式

Caffe 需要预先安装比较多的依赖项,CUDA,snappy,leveldb,gflags,glog,szip,lmdb,OpenCV,hdf5,BLAS,boost、ProtoBuffer等;

Caffe官网:http://caffe.berkeleyvision.org/;

Caffe Github : https://github.com/BVLC/caffe;Caffe 安装教程:

http://caffe.berkeleyvision.org/installation.html,

http://blog.csdn.net/yhaolpz/article/details/71375762;

Caffe 安装分为CPU和GPU版本,GPU版本需要显卡支持以及安装CUDA

0
相关文章
相关留言
写留言...
微信公众号
长按二维码关注"米格实验室"微信公众号