Menu Close

人工智能基础框架–TensorFlow

2016年3月份,Google的围棋人工智能程序AlphaGo以4比1的大比分,战胜人类选手李世石,在全球成功引起广泛关注,引起了一波人工智能的热潮。从智能手机的语音助手,到相机的人脸识别,人工智能技术已经进入到我们生活的方方面面,在未来将深刻的影响我们的生活。

为了加速深度学习领域的发展,2015年11月9日,Google发布深度学习框架TensorFlow并宣布开源。在短短的一年时间内,在GitHub上,TensorFlow就成为了最流行的深度学习项目。

 

TensorFlow在图形分类、音频处理、推荐系统和自然语言处理等场景下都有丰富的应用。虽然Tenforflow开源时间刚满一年,但是它正在以迅猛的速度渗入到我们的寻常生活中。

 

在澳大利亚,海洋生物学家与来自昆士兰大学(Queensland University)的计算机科学家合作,通过TensorFlow技术,使用探测器自动地在数以万计的航拍照片中寻找海牛;在日本,一位年轻人利用TensorFlow运用到农业上,按照黄瓜大小、形状、颜色以及其他特征来挑选黄瓜并对它们进行分类;在医学领域,发射科的医生通过采用TensorFlow,使其在医学扫描中能够识别帕金森病的迹象。湾区的数据科学家在树莓派上使用TensorFlow来追踪记录加州火车的动态。最近, AlphaGo开发团队Deepmind也声称,将从Torch迁移到TensorFlow中,这无不印证了TensorFlow在业界的流行程度。

 

TensorFlow特点

上面介绍了TensorFlow在开源短短一年的时间来,就有了非常广泛的应用,那么让我们回到技术层面上,TensorFlow到底是一个什么东西,它有什么特点让它在这么短的时间内得到如此广泛的应用。

 

首先,TensorFlow是一个深度学习框架,支持Linux平台,Windows平台,Mac平台,甚至手机移动设备等各种平台。其次,TensorFlow提供了非常丰富的深度学习相关的API,可以说目前所有深度学习框架里,提供的API最全的,包括基本的向量矩阵计算、各种优化算法、各种卷积神经网络和循环神经网络基本单元的实现、以及可视化的辅助工具、等等。

 

TensorFlow的特点:

 

高度的灵活性

TensorFlow并不仅仅是一个深度学习库,只要可以把你的计算过程表示称一个数据流图的过程,我们就可以使用TensorFlow来进行计算。TensorFlow允许我们用计算图的方式还建立计算网络,同时又可以很方便的对网络进行操作(具体计算图是什么意思,后面会有详细的介绍)。用户可以基于TensorFlow的基础上用python编写自己的上层结构和库,如果TensorFlow没有提供我们需要的API的,我们也可以自己编写底层的C++代码,通过自定义操作将新编写的功能添加到TensorFlow中。

 

真正的可移植性

TensorFlow可以在CPU和GPU上运行,可以在台式机,服务器,移动设备上运行。你想在你的笔记本上跑一下深度学习的训练,或者又不想修改代码,想把你的模型在多个CPU上运行, 亦或想将训练好的模型放到移动设备上跑一下,这些TensorFlow都可以帮你做到。

 

多语言支持

TensorFlow采用非常易用的python来构建和执行我们的计算图,同时也支持C++ 的语言。我们可以直接写python和C++的程序来执行TensorFlow,也可以采用交互式的ipython来方便的尝试我们的想法。当然,这只是一个开始,后续会支持更多流行的语言,比如Lua,JavaScript 或者R语言。

 

丰富的算法库

TensorFlow提供了所有开源的深度学习框架里,最全的算法库,并且在不断的添加新的算法库。这些算法库基本上已经满足了大部分的需求,对于普通的应用,基本上不用自己再去自定义实现基本的算法库了。

 

完善的文档

TensorFlow的官方网站,提供了非常详细的文档介绍,内容包括各种API的使用介绍和各种基础应用的使用例子,也包括一部分深度学习的基础理论。不过这些都是英文的。

 

自从宣布开源以来,已经超过450人对TensorFlow做出贡献,其中包括Google员工,外部研究人员和独立程序员,全球各地的工程师对TensorFlow的完善,已经让TensorFlow社区变成了Github上最活跃的深度学习框架。

 

其他深度学习框架

除了TensorFlow,在它之前和之后也有很多其他的深度学习框架,各个框架都有各自的优缺点,并不是说某一个框架就是其他的框架要好。这里也只是做一个简单的介绍,方便大家有个全面的了解。

 

Caffe

Caffe的全称是:Convolution Architecture For Feature Extraction。 是第一个在工业上得到广泛应用开源深度学习框架,也是第一代深度学习框架里最受欢迎的框架。

 

Caffe是C++/CUDA架构,支持命令行、Python和MATLAB接口;支持CPU/GPU。

 

caffe的优势:

上手快

模型与相应优化都是以文本形式而非代码形式给出。Caffe给出了模型的定义、最优化设置以及预训练的权重,方便立即上手。

 

速度快

能够运行最棒的模型与海量的数据。 Caffe与cuDNN结合使用,执行速度快。

 

模块化

方便扩展到新的任务和设置上。 可以使用Caffe提供的各层类型来定义自己的模型。

 

社区好

很长一段时间都是最受欢迎的深度学习框架,有很大一批的用户,有大批的用户讨论和贡献,在平时的一些论文中也会看到很多实现是基于caffe框架的。并且Caffe的设计也影响到了在它之后的很多框架。

 

但是随着深度学习的不断发展,深度学习模型也变得越来越越复杂,用户对框架的灵活性要求越来越高,Caffe的作者贾杨清目前也在FaceBook内部搞起了Caffe2,以适应不断发展的需求。

 

MXNET

MXNET主要继承于DMLC的CXXNET和Minerva这两个项目,其名字来自Minerva的M和CXXNet的XNet。MXNET是深度学习开源世界非常优秀的项目,它借鉴了Torch,Theano等众多平台的设计思想,并且加入了更多新的功能,采用c++开发,支持的接口语言多达7种,包括:Python, R语言,Julia, Scala, JavaScript,Matlab,Go语言。

 

MXNET的优势

吸收在它之前的各个开源框架之精华,设计更加合理。

 

支持分布式,非常方便的支持多机多GPU。

 

资源利用率高,对深度学习的计算做了专门的优化,GPU显存和计算效率都比较高。MXNET的单机和分布式的性能都非常好。

 

支持众多的语言接口,使用既灵活又方便。

 

MXNet的代码量小、灵活高效,专注于核心深度学习领域,容易深度定制。

 

最近亚马逊宣布将MXNET作为亚马逊AWS的最主要的深度学习框架,并且还会为MXNET的开发提供软件代码和投资,相信在亚马逊这种巨头的支持下,MXNET将迎来更大的发展和更多的应用。

 

Torch

Torch已经诞生了十年之久,一直以来主要用于在研究机构里进行机器学习算法相关的科学计算。Torch并没有跟随Python的潮流,它的操作语言是Lua语言。Torch被FaceBook的人工智能实验室和之前的英国的DeepMind团队广泛的使用。

 

Torch 的封装少,简单直接,前期学习和开发时的思维难度都比较低,具有比较好的灵活性和速度。

 

由于封装少和 Lua 本身的限制,工程性不好,导致 Torch更加适合于探索性研究开发,而不适合做大项目的开发。但是Torch在拥有大量的用户,有很多新的算法或者论文的实现都是Torch实现的。有点不好的地方是采用并不是十分流行的Lua语言来操作,不熟悉的用户需要一点时间来学习。

 

最近FaceBook宣布开源了基于Torch7的深度学习框架TorchNet,应该Torch会在以后有更好的发展和更多的应用。

 

Theano

Theano本来是和深度学习没有什么关系的,本来是一群研究者想用Python来做一些科学计算,但是只用Numpy/SciPy效率太低,于是就想只掉用一下库就可以导数的符号表达式,就造了一些轮子,让这些轮子可以和数值计算无缝对接,这就有了Theano的原型。

 

Theano是一个强大的数值计算库,几乎能在任何情况下使用,从简单的logistic回归到建模并生成音乐和弦序列或是使用长短期记忆人工神经网络对电影收视率进行分类。

 

Theano大部分代码是使用Cython编写,Cython是一个可编译为本地可执行代码的Python语言,与仅仅使用解释性Python语言相比,它能够使运行速度快速提升。

 

最重要的是,很多优化程序已经集成到Theano库中,它能够优化你的计算量并让你的运行时间保持最低。Theano派生出了大量的深度学习Python的软件包,最大的特点是非常的灵活,适合做学术研究实验,你可以仅仅使用Python语言来创建几乎任何类型的神经网络结构。不足是Theano的程序的编译过程比较慢,程序在导入Theano的时候也比较慢。

 

CNTK

CNTK的全称是:Computational Network Toolkit. 来源于微软开源的深度学习框架,基于C++开发的跨多个平台的深度学习框架。支持分布式,多机多卡,使用的方式和Caffe类似,通过配置文件来运行,最近也开始支持python的操作接口。

 

原文链接:https://blog.csdn.net/luodongri/article/details/53583618

Posted in IC

发表评论

相关链接