深度学习工具 谷歌

2017-01-01 20:44:47 yzhang6_10 阅读数 3919

深度学习工具

目前比较流程的深度学习工具主要有Caffe,Torch & Overfeat,MxNet,TensorFlow,Theano等。

Caffe

Caffe(快速特征植入的卷积神经网络),有伯克利视觉和学习中心开发的基于C++/CUDA/Python实现的卷积神经网络框架,提供了面向命令行、Matlab和Python的绑定接口。其前身为DeCAF,作者为贾杨清。

Caffe特性:

  • 它实现了前馈卷积神经网络架构(CNN),而不是递归网络架构(RNN)
  • 速度快,原因是利用了MKL、OpenBLAS、cuBLAS等计算库,支持GPU加速。
  • 适合做特征提取,实际上适合做二维图像数据的特征提取。
  • 完全开源,遵循BSD-2协议。
  • 提供了一整套工具集,可用于模型训练、预测、微调、发布、数据预处理,以及良好的自动测试
  • 它带有一系列参考模型和快速上手例程
  • 它在国内外有比较活跃的社区,有很多衍生吧项目,如Caffe for Windows、Caffe with OpenCL、NVIDIA DIGITS2、R_CNN等。
  • Caffe代码组织良好,可读性强,通过掌握Caffe代码可以很容易学习其他框架。

综上,Caffe是深度学习初学者入门的首先。

Torch & OverFeat

Torch是一个出现较早的支持大部分机器学习算法的科学计算框架。目前已有四个版本,分别为Torch 1、Torch 3、Torch 5、Torch 7。Torch使用轻量脚本语言Lua及其C/CUDA扩展模块实现,底层数值计算通过高效的OpenMP/SSE/CUDA加速,同时具备灵活性和速度优势。得益于Lua的轻量接口,Torch可以很容易接入第三方软件。

Torch为机器学习提供了类似于Matlab的环境,目前纽约大学(NYU)、Facebook AI实验室和Google DeepMind Torch均使用该框架做深度学习研究。**Torch不仅支持CPU/GPU上运行,甚至支持嵌入式设备如iOS、Android、FPGA。
**
Torch完全开源,遵循BSD协议,主要内置8个包:

torch:主包,提供Tensors基本数据类型和操作、简单的序列化接口和其他基本功能。

lab & plot:提供标准的类似于Matlab的函数,用于创建、变换、打印Tensors。

qt – Qt和Lua的完全绑定,实现Torch 7 Tensors和QImage之间的透明转换,美观的图形界面非常适合快读开发交互式演示程序。

nn:提供了一组标准神经网络模块,以及一组容器模块,可用于定义任意有向(无环或有环)图。显示描述图结构,使用可插入模块,避免了复杂的图解析器,或者其他中间件编译器。

image:图像处理包,提供了所有标准图像处理函数(如载入/保存图像、缩放/旋转、色彩空间变换、卷积、高斯核等)。

optim:提供最陡下降法、共轭梯度法和有限内存下BFGS等优化算法包。

unsup:包括几个非监督学习算法,如K-means、稀疏编码、自动编码器。

third-party:进一步封装,增加便携的软件包。

MxNet

MxNet是一个面向效率和灵活性设计的深度学习框架,吸引了多种不同框架优点,加入了更多新的功能,如更加方便的多卡和多机分布式运行,目前MxNet比cxxnet块40%,而且GPU显存使用少了一半。

MxNet提供了两种编程接口:

N维数组接口,类似于Matlab或Python中的numpy.ndarray或torch.tensor。它独有的优势在于通过背后的engine可以在性能和内存使用上优于其他框架。

符号接口,可以快速构建一个神经网络,实现自动求导功能。

目前MxNet还在快速发展中,以后目标是更多的语言绑定(目前支持比较好的是Python,马上会有Julia和R)、更好的文档和更多的应用(语言建模、语音、机器翻译、视频)发展

TensorFlow

Google在2011年推出人工深度学习系统——DistBelief。通过DistBelief,Google能够扫描数据中心数以千计的核心,并建立更大的神经网络。这个系统将Google应用中的语音识别率提高了25%,以及在Google Photos中建立了图片搜索,并驱动了Google的图片字幕匹配实验。DistBelief还存在不少不足和限制。它很难被设置,和Google内部的基础设施联系也过于紧密,这导致研究代码机会不可能分享。

针对以上问题,Google在2015年Google Research Blog宣布推出新一代人工智能学习系统——TensorFlow。

TensorFlow是一个异构分布式系统上的大规模机器学习框架,移植性好(小到移动设备如手机,大到大规模集群,都能支持),支持多种深度学习模型。根据Google说法,TensorFlow是综合的、灵活的、可移植的、易用的,更为关键的,它是开源的。同时,TensorFlow的速度相比前代DistBelief有了不小的提升,在一些跑分测试中,TensorFlow的得分是第一代系统的两倍。尽管如此,TensorFlow的效率仍然比不过其他大部分开源框架。不过,随着TensorFlow源码逐步开放,对新硬件、新设备、新的加速如cuDNN的支持力度不断提升,其成为目前极具潜力的深度学习。

Theano

Theano是由LISA开发的基于Python的深度学习框架,可以定义好数学表达式并高效地优化,求值。

Theano支持机器学习中的逻辑回归、多层感知器、深度卷积网络等监督学习方法,以及自编码器、降噪自编码器、限制玻尔兹曼机、深度置信网络等非监督/半监督学习方法,在国内外教育领域非常受欢迎。Thenao有个致命的短板,就是计算速度慢,虽然有GPU加速,但仍然不如其他框架高效,故只适合研究人员使用,不适合线上环境部署。

CNTK

CNTK是微软推出的开源深度学习框架,通过一系列步骤构成有向图来表达网络。

CNTK的优点是高性能、高灵活性、可扩展性好。CNTK支持CNN、LSTM、RNN等流行的网络结构,支持分布式训练。在纯CPU、单GPU、多GPU、多机多GPU硬件平台下都具有较高的性能

CNTK支持双机8 GPU并行处理,而其他框架只支持单GPU或单机多GPU(TensorFlow、Torch 7 Caffe)。从单GPU对比性能来看,Theano是性能最低的,而CNTK、Torch、Caffe相差不大。单机4 GPU的性能对比结果显示了CNTK具有极高的效率GitHub上也有对常见的深度学习框架卷积计算性能对比情况。

虽然CNTK有上述优点,但同时要看到微软对自家Windows支持不遗余力,导致CNTK对Windows平台支持最好,不推荐作为深度学习初学者入门工具,而是选择拥有更大的社区的Caffe。


参考文献: 深度学习-21天实战caffe

2018-01-22 21:39:35 crcsafe 阅读数 469

本周早些时候Google开源了TensorFlow(GitHub),此举在深度学习领域影响巨大,因为Google在人工智能领域的研发成绩斐然,有着雄厚的人才储备,而且Google自己的Gmail和搜索引擎都在使用自行研发的深度学习工具。

无疑,来自Google军火库的TensorFlow必然是开源深度学习软件中的明星产品,登陆GitHub当天就成为最受关注的项目,当周获得评星数就轻松超过1万个。

对于希望在应用中整合深度学习功能的开发者来说,GitHub上其实还有很多不错的开源项目值得关注,首先我们推荐目前规模人气最高的TOP3:

一、Caffe。源自加州伯克利分校的Caffe被广泛应用,包括Pinterest这样的web大户。与TensorFlow一样,Caffe也是由C++开发,Caffe也是Google今年早些时候发布的DeepDream项目(可以识别喵星人的人工智能神经网络)的基础。

二、Theano。2008年诞生于蒙特利尔理工学院,Theano派生出了大量深度学习Python软件包,最著名的包括BlocksKeras

三、Torch。Torch诞生已经有十年之久,但是真正起势得益于去年Facebook开源了大量Torch的深度学习模块和扩展。Torch另外一个特殊之处是采用了不怎么流行的编程语言Lua(该语言曾被用来开发视频游戏)。

除了以上三个比较成熟知名的项目,还有很多有特色的深度学习开源框架也值得关注:

、Brainstorm。来自瑞士人工智能实验室IDSIA的一个非常发展前景很不错的深度学习软件包,Brainstorm能够处理上百层的超级深度神经网络——所谓的公路网络Highway Networks

五、Chainer。来自一个日本的深度学习创业公司Preferred Networks,今年6月发布的一个Python框架。Chainer的设计基于define by run原则,也就是说,该网络在运行中动态定义,而不是在启动时定义,这里有Chainer的详细文档

六、Deeplearning4j。顾名思义,Deeplearning4j是”for Java”的深度学习框架,也是首个商用级别的深度学习开源库。Deeplearning4j由创业公司Skymind于2014年6月发布,使用Deeplearning4j的不乏埃森哲、雪弗兰、博斯咨询和IBM等明星企业。

DeepLearning4j是一个面向生产环境和商业应用的高成熟度深度学习开源库,可与Hadoop和Spark集成,即插即用,方便开发者在APP中快速集成深度学习功能,可应用于以下深度学习领域:

  • 人脸/图像识别
  • 语音搜索
  • 语音转文字(Speech to text)
  • 垃圾信息过滤(异常侦测)
  • 电商欺诈侦测

七、Marvin。是普林斯顿大学视觉工作组新推出的C++框架。该团队还提供了一个文件用于将Caffe模型转化成语Marvin兼容的模式。

八、ConvNetJS。这是斯坦福大学博士生Andrej Karpathy开发浏览器插件,基于万能的JavaScript可以在你的游览器中训练神经网络。Karpathy还写了一个ConvNetJS的入门教程,以及一个简洁的浏览器演示项目

九、MXNet。出自CXXNet、Minerva、Purine等项目的开发者之手,主要用C++编写。MXNet强调提高内存使用的效率,甚至能在智能手机上运行诸如图像识别等任务。

十、Neon。由创业公司Nervana Systems于今年五月开源,在某些基准测试中,由Python和Sass开发的Neon的测试成绩甚至要优于Caffeine、Torch和谷歌的TensorFlow。

End.

2017-10-07 10:31:18 zyk1120102464 阅读数 674

转自: http://blog.csdn.net/striker_v/article/details/52692848


深度学习工具汇总

A Summary of Deep Learning Developing Tools


       随着深度学习的迅猛发展,深度学习的开发框架和工具也越来越多。不只是著名大学和科研机构在研究自己的深度学习框架,各大公司也已经推出了不少深度学习开发平台。

                                            

                                             

    以下是深度学习主页上列出的深度学习开发工具。


    由此可见,目前基于深度学习的开发平台和开发工具种类已经很多,下面主要介绍一下大家普遍使用的一些开发工具。

 

 

1. DeepLearnToolbox


DeepLearn Toolbox是一种深度学习的Matlab实现。它以Matlab的一种扩展工具箱的方式被使用。其主要特性如下:

底层语言:Matlab

接口语言:Matlab

运行方式:CPU or GPU

操作系统:Windows or Linux

安装方式:下载后在Matlab中打开并添加路径即可

支持的深度学习网络:人工神经网络(NN),卷积神经网络(CNN),深度置信网(DBN),栈式自动编码器(SAE),卷积自动编码器(CAE)

集成的数据集:MNIST

  优势:使用Matlab实现,源码短且可读性强,适合深度学习入门学习。

  不足:集成的网络构建方法及网络参数选择较少,不能自由设定网络结构和部分参数,可变性差,设计自己的网络需要大量编程。

  下载地址:https://github.com/rasmusbergpalm/DeepLearnToolbox

 

2. Theano

Theano是一个Python库,它允许使用者有效地定义、优化和评估涉及多维数组的数学表达式,同时支持GPU和高效符号分化操作。

Theano具有以下特点:

(a)与NumPy紧密相关(在Theano的编译功能中使用了Numpy.ndarray)

(b)透明地使用GPU(执行数据密集型计算比CPU快了140多倍)

(c)速度和稳定性的优化(即使输入的x非常小也可以得到log(1+x)正确结果)

(d)动态生成C代码(表达式计算更快)

(e)广泛的单元测试和自我验证(多种错误类型的检测和判定)

自2007年起,Theano一直致力于大型密集型科学计算研究,但它目前也很被广泛应用在课堂之上(如Montreal大学的深度学习/机器学习课程)。

Theano的主要特性如下。

底层语言:Python

接口语言:Python

运行方式:CPU or GPU

操作系统:Windows or Linux

安装方式:需要配置相关Python库 需要CUDA支持

支持的深度学习网络:支持大部分先进的网络,提供数学计算支持,网络需要自己实现,缺少写好的例子。

集成的数据集:无

  优势:它引领了符号图在编程网络中使用的趋势,Theano的符号API支持循环控制,让RNN的实现更加容易且高效。而且Theano跨平台,模型能够部署到Windows环境上。

  不足:启动时间长,缺乏底层接口,并且其Python解释器也很低效,对工业用户而言缺少吸引力。

  下载地址:https://github.com/Theano/Theano

 

3. Caffe

Caffe的全称应该是ConvolutionalArchitecture for Fast Feature Embedding,它是一个清晰、高效的深度学习框架,它是开源的。Caffe是目前最流行的深度学习框架之一。

总的来说,Caffe的特点如下:
(a)表达方便:模型和优化办法的表达用的是纯文本办法表示,而不是代码
(b)速度快:对于科研来说,我们提供接近于工业化的速度对于大规模数据和当前最牛掰的算法模型是非常重要的
(c)模块化:具有新任务和设置需要的灵活性和扩展性
(d)开放性:科学研究和应用程序可调用同样的代码,参考模型,并且结果可重现。
(e)社区性:学术研究,启动原型和工业应用领域的伙伴以一个BSD-2项目的形式共同讨论和开发。

Caffe的主要特性如下。

开发者:Berkeley Vision and LearningCenter

底层语言:C++

接口语言:命令行,Python,Matlab

运行方式:CPU or GPU

操作系统:Windows or Linux

安装方式:需要配置相关Python库 需要CUDA支持 需要OpenCV支持

支持的深度学习网络:支持大部分先进的网络

集成的数据集:CIFAR10 ILSVRC12 MNIST

  优势:网络开发和构建过程简单,运行速度快,实现了多种接口,实现了跨平台,可能是第一个主流的工业级深度学习工具。

  不足:Caffe对递归网络和语言建模的支持很差,支持pycaffe接口,但这仅仅是用来辅助命令行接口的,而即便是使用pycaffe也必须使用protobuf定义模型。

  下载地址:https://github.com/BVLC/caffe

 

4. Torch & Torchnet

Torch诞生已经有十年之久,但是真正起势得益于2015年Facebook开源了大量Torch的深度学习模块和扩展。Torch另外一个特殊之处是采用了不怎么流行的编程语言Lua(该语言曾被用来开发视频游戏)。

Torch的主要特性如下。

开发者:Facebook

底层语言:用快速的脚本语言LuaJit开发,底层是C/CUDA实现

接口语言:Lua语言

运行方式:CPU or GPU

操作系统:Windows or Linux

安装方式:需要安装Lua语言支持

支持的深度学习网络:支持大部分先进的网络

  优势:对卷积网络的支持非常好。Torch通过很多非官方的扩展支持大量的RNN,同时网络的定义方法也有很多种。

  不足:Torch本质上是以图层的方式定义网络的,这种粗粒度的方式使得它对新图层类型的扩展缺乏足够的支持。模型运行需要LuaJIT的支持,虽然这样做对性能的影响并不大,但却对集成造成了很大的障碍,使得它的吸引力不如Caffe/CNTK/TensorFlow等直接支持C++的框架。

  下载地址:http://torch.ch/

 

 

 

 

 

 

 

 

 

5. TensorFlow

TensorFlow 是谷歌发布的第二代机器学习系统。具体的讲,TensorFlow是一个利用数据流图(Data Flow Graphs)进行数值计算的开源软件库:图中的节点(Nodes)代表数学运算操作,同时图中的边(Edges)表示节点之间相互流通的多维数组,即张量(Tensors)。这种灵活的架构可以让使用者多样化地将计算部署在台式机、服务器或者移动设备的一个或多个CPU上,而且无需重写代码。

TensorFlow具有以下特性:

开发者:Google Brain Team

底层语言:C++ Python

接口语言:Python C/C++

运行方式:CPU or GPU

操作系统:Linux or Mac OS X

安装方式:需要安装Python支持

支持的深度学习网络:卷积网络循环网络

优势:TensorFlo是一个理想的RNN(递归神经网络) API和实现,而且它架构清晰,采用了模块化设计,支持多种前端和执行平台。

不足:TensorFlow并不支持双向RNN和3D卷积,同时公共版本的图定义也不支持循环和条件控制,这使得RNN的实现并不理想,因为必须要使用Python循环且无法进行图编译优化。

    下载地址:www.tensorflow.org/

 

6. CNTK

CNTK(Computational Network Toolkit )是一个统一的深度学习工具包,该工具包通过一个有向图将神经网络描述为一系列计算步骤。在有向图中,叶节点表示输入值或网络参数,其他节点表示该节点输入之上的矩阵运算。

CNTK具有以下特性:

开发者:Microsoft

底层语言:C++

接口语言:Python C/C++ 命令行

运行方式:CPU or GPU

操作系统:Windows or Linux

安装方式:安装相关依赖库并编译源码

支持的深度学习网络:前馈DNN网络 卷积网络 循环网络

优势:CNTK通过细粒度的构件块让用户不需要使用低层次的语言就能创建新的、复杂的层类型。与Caffe一样也是基于C++并且跨平台的,大部分情况下部署非常简单。同时它实现了跨多GPU 和服务器自动分化和并行化的随机梯度下降(SGD,误差反向传播)学习。
    不足:CNTK不支持ARM架构,这限制了它在移动设备上的能力。

下载地址:https://github.com/Microsoft/CNTK

 

7. MXNET

MXNet是一个兼具效率和灵活性的深度学习框架。它允许使用者将符号编程和命令式编程相结合,以追求效率和生产力的最大化。其核心是动态依赖调度程序,该程序可以动态自动进行并行化符号和命令的操作。其中部署的图形优化层使得符号操作更快和内存利用率更高。该库轻量且便携带,并且可扩展到多个GPU和多台主机上。

MXNET具有以下特性:

开发者:分布式(深度)机器学习社区

底层语言:C++

接口语言:C++ Python Julia Matlab JavaScript R Scala

运行方式:CPU or GPU

操作系统:Linux  OS X  Windows

安装方式:需要Python和CUDA支持

支持的深度学习网络:随机储存器/动态贝叶斯网络 卷积网络 循环网络

优势:MXNet强调提高内存使用的效率,甚至能在智能手机上运行诸如图像识别等任务。MXNet整合了各种编程方法的优势最大限度地提高灵活性和效率。另外,MXNet对“云计算”友好,直接兼容S3、HDFS和Azure。

下载地址:https://github.com/dmlc/mxnet

 

8. Keras

Keras是极其精简并高度模块化的神经网络库,在TensorFlow 或 Theano 上都能够运行,是一个高度模块化的神经网络库,支持GPU和CPU运算。Keras可以说是Python版的Torch7,对于快速构建CNN模型非常方便,同时也包含了一些最新文献的算法,比如Batch Noramlize,文档教程也很全,在官网上作者都是直接给例子浅显易懂。Keras也支持保存训练好的参数,然后加载已经训练好的参数,进行继续训练。
    Keras侧重于开发快速实验,用可能最少延迟实现从理念到结果的转变,即为做好一项研究的关键。

当需要使用符合如下要求的深度学习的库时,就可以考虑使用Keras:

(a)考虑到简单快速的原型法(通过总体模块性、精简性以及可扩展性);

(b)同时支持卷积网络和递归网络,以及两者之间的组合;

(c)支持任意连接方案(包括多输入多输出训练);

(d)可在CPU和GPU 上无缝运行。

下载地址:https://github.com/fchollet/keras

 

 

参考资料:

1. Deep Learning主页

http://deeplearning.net/

2. Deep Learning –Software Links

http://deeplearning.net/software_links/

3.DeepLearnToolbox使用总结

http://blog.csdn.net/lifeitengup/article/details/10219075

4. CNTK从入门到深入研究(1)- 一切都从介绍和环境搭建开始

http://blog.csdn.net/borisjineman/article/details/50664298

5. 深度学习框架的评估与比较

http://www.infoq.com/cn/news/2016/01/evaluation-comparison-deep-learn?utm_campaign=infoq_content&

6. 主流深度学习框架对比

http://www.360doc.com/content/16/0913/21/32626470_590596139.shtml

7. TensorFlow等主流深度学习框架比较分析

http://www.tuicool.com/articles/BVFb6bb

8. 十个值得一试的开源深度学习框架

http://os.51cto.com/art/201511/497444.htm

9. 常用深度学习框架

http://www.gpus.cn/qianduan/front/getNewsArc?articleid=111

10 易用的深度学习框架Keras简介

http://www.tuicool.com/articles/ZbAJbiN

11. Keras Documentation

https://keras.io/

12. python keras (一个超好用的神经网络框架)的使用以及实例

http://blog.csdn.net/star_bob/article/details/48598417

 

 

2016-06-15 18:36:10 prom1201 阅读数 11744

本周早些时候Google开源了TensorFlow(GitHub),此举在深度学习领域影响巨大,因为Google在人工智能领域的研发成绩斐然,有着雄厚的人才储备,而且Google自己的Gmail和搜索引擎都在使用自行研发的深度学习工具。

无疑,来自Google军火库的TensorFlow必然是开源深度学习软件中的明星产品,登陆GitHub当天就成为最受关注的项目,当周获得评星数就轻松超过1万个。

对于希望在应用中整合深度学习功能的开发者来说,GitHub上其实还有很多不错的开源项目值得关注,首先我们推荐目前规模人气最高的TOP3:

一、Caffe。源自加州伯克利分校的Caffe被广泛应用,包括Pinterest这样的web大户。与TensorFlow一样,Caffe也是由C++开发,Caffe也是Google今年早些时候发布的DeepDream项目(可以识别喵星人的人工智能神经网络)的基础。

二、Theano。2008年诞生于蒙特利尔理工学院,Theano派生出了大量深度学习Python软件包,最著名的包括BlocksKeras

三、Torch。Torch诞生已经有十年之久,但是真正起势得益于去年Facebook开源了大量Torch的深度学习模块和扩展。Torch另外一个特殊之处是采用了不怎么流行的编程语言Lua(该语言曾被用来开发视频游戏)。

除了以上三个比较成熟知名的项目,还有很多有特色的深度学习开源框架也值得关注:

、Brainstorm。来自瑞士人工智能实验室IDSIA的一个非常发展前景很不错的深度学习软件包,Brainstorm能够处理上百层的超级深度神经网络——所谓的公路网络Highway Networks

五、Chainer。来自一个日本的深度学习创业公司Preferred Networks,今年6月发布的一个Python框架。Chainer的设计基于define by run原则,也就是说,该网络在运行中动态定义,而不是在启动时定义,这里有Chainer的详细文档

六、Deeplearning4j。顾名思义,Deeplearning4j是”for Java”的深度学习框架,也是首个商用级别的深度学习开源库。Deeplearning4j由创业公司Skymind于2014年6月发布,使用Deeplearning4j的不乏埃森哲、雪弗兰、博斯咨询和IBM等明星企业。

DeepLearning4j是一个面向生产环境和商业应用的高成熟度深度学习开源库,可与Hadoop和Spark集成,即插即用,方便开发者在APP中快速集成深度学习功能,可应用于以下深度学习领域:

  • 人脸/图像识别
  • 语音搜索
  • 语音转文字(Speech to text)
  • 垃圾信息过滤(异常侦测)
  • 电商欺诈侦测

七、Marvin。是普林斯顿大学视觉工作组新推出的C++框架。该团队还提供了一个文件用于将Caffe模型转化成语Marvin兼容的模式。

八、ConvNetJS。这是斯坦福大学博士生Andrej Karpathy开发浏览器插件,基于万能的JavaScript可以在你的游览器中训练神经网络。Karpathy还写了一个ConvNetJS的入门教程,以及一个简洁的浏览器演示项目

九、MXNet。出自CXXNet、Minerva、Purine等项目的开发者之手,主要用C++编写。MXNet强调提高内存使用的效率,甚至能在智能手机上运行诸如图像识别等任务。

十、Neon。由创业公司Nervana Systems于今年五月开源,在某些基准测试中,由Python和Sass开发的Neon的测试成绩甚至要优于Caffeine、Torch和谷歌的TensorFlow。

End.

2017-11-01 11:08:32 xieyan0811 阅读数 2287

1. 引入

深度学习的工具有很多Tensorflow, Theano, Caffe, Keras, MXNet, Scikit-learn…有用c++写的,有用Python写的,还有R的,Java的,从哪里入手呢?
先看看最热门的Tensorflow,它是谷歌研发的人工智能学习系统,主要优点是分布式计算,特别是在多GPU的环境中。Theano也是比较低级的库,一般单机使用.什么是低级库?就像炒回锅肉不用从杀猪开始,杀猪就是比较低级的工作,已经有人帮你做好了,像Keras这种较上层的工具,它把 Theano和TensorFlow包装成了更具人性化的API。至于是选择低级工具,还是上层工具,主要取决于您的目标是开肉联厂还是开饭馆.

图片.png
图片.png

2. 工具简介

Caffe是c++写的库,是较低层级的库,它是个老牌的工具,工作稳定,性能也好,还提供绑定到Python上的编程语言,但相对没有Python类工具灵活.
Theano是一个低级库,透明地使用GPU来完成数学计算.也是一个老牌的工具,工作比较稳定,只支持单机,可供Keras调用.
TensorFlow也是个低级的库,由Google发布,其的主要优点是分布式计算,特别是在多GPU的环境中,可供Keras调用.
CNTK也是个低级的库,微软发布,可供Keras调用.
MXNet还是一个低级库,由C++实现的,同时提供了python,lua,R,和js等多种语言接口,优点是分布式计算,它支持多个CPU / GPU分配训练网络,可供Keras调用.
Keras用得比较多,它把 Theano,TensorFlow,MXNet,CNTK包装成了更具人性化的API(低级的库想做完整的解决方案,还是要自己写很多代码),可供快速入门,但速度相对慢一些,在设计复杂算法时,也相对受限.
Lasagne是基于Theano的,用于构建和训练网络的轻量级库。Lasagne的功能是Theano的低级编程和Keras的高级抽象之间的一个折中。
NoLearn把Lasagne封装成了更具人性化的API(就如同Keras把 Theano和TensorFlow封装一样),此外,NoLearn中所有的代码都是与scikit-learn兼容的.
Scikit-learn是Python中常用的机器学习库,除了深度学习也提供很多浅层模型,深度学习不是它的重点.
Torch是由lua语言编写的深度学习库.
这里所谓的高级/低级都是相对而言的,高级只是相对简单一些.在算法的使用层面,对上层调用比较多,但会牺牲一些效率,限制也比较多.在算法改进层面,更多用到低级库.
接口怎么调都不过都是调库而已.关键还是看如何设计神经网络的结构,以及它背后的数学原理,所以说深度学习主要比拼的还是"内功".

3. 工具选择

上述工具很多是Python写的,或者有Python的接口,建议在Python层面调用.
作为入门,建议选择Keras,基于以下原因:代码简单,资料多,可将Theano,Tensorflow等作为后端(只要安装好后端工具,就可以使用它了,无需了解具体用法;有一定扩展性(可用theano或tensorflow的语句来写扩展功能并和keras结合使用).最主要的还是容易上手.

4. Keras&Theano&Tensorflow简单安装

1) 安装软件

以下为最简单地安装方法,此文及下文中环境默认为ubuntu

$ sudo pip install tensorflow
$ sudo pip install theano
$ sudo pip install keras

2) 安装例程

学习keras最好从它的例程开始,需要下载keras源码

$ git clone https://github.com/fchollet/keras.git

例程在keras/examples目录下
推荐mnist_*例程,它分别使用了CNN,RNN,GAN等方法实现了手写数字的识别,可以先运行一下看看效果.代码很简单,不过是看代码时,就会发现,虽然只有几个语句,几个参数,但还是不明白,为什么要这么写?和那些讲原理的书有点对不上.因此,建议先自己写个简单神经网络具体实现(不是调库),以了解整个流程以及各个参数的具体作用.具体请见下一篇《深度学习——BP神经网络》

5. 配置GPU支持

1) 说明

到上一步简单安装之后,例程基本都可以跑了.此部分,建议初学者看看就行了,不要急于把环境配置得一步到位.NVdriver+Cuda+TensorFlow+Theano各个软件版本相互依赖,又与机器的操作系统以及显卡型号相关,在配置的过程中的确有很多坑,有可能导致桌面无法启动,以致严重打乱学习的进程.强烈建议先把深度学习的框架弄明白了,需要大量计算时,再回来配置GPU.
注意:只有评分在3.0以上的显卡才能支持tensorflow_gpu,具体型号见https://developer.nvidia.com/cuda-gpus

2) NVdriver

nvidia的卡大部分都支持深度学习,只是性能不同。可用以下命令看看自己显卡情况(Tensorflow需要评分3.0以上,Theano只需支持cuda即可)

$ lspci  | grep -i vga
$ nvidia-smi

显卡驱动可能不是最新的,一般在图形界面->系统设置->软件更新->附加驱动->选择nvidia的可用驱动.也可以用apt-get命令安装,还可以从Nvidia官网上下载安装脚本,但该方法需要先关掉图形界面,安装后再开启,比较麻烦.
另外需要注意的是,不是版本号越高,支持的显卡越多,有些老的显卡只在低版本支持——这也就是安装中最大的坑:显卡驱动升级后不支持当前硬件,使得图形界面无法启动了——不断显示输入密码界面.

$ ls /proc/driver/nvidia/gpus/

正常安装后,以上目录被生成.

3) Cuda

Cuda是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。各个机器学习库都通过Cuda库调用GPU.
Cuda的安装可使用命令(不推荐此方法)

$ apt-get install nvidia-cuda-toolkit
$ nvcc -V # 安装成功后,看一下版本信息

至于安装后能否正常使用,就要看运气了.Cuda和Nvdriver,以及TensorFlow的版本都是强相关的,当使用apt-get安装Cuda时,有时会升级显卡驱动(安装时会提示升级一堆包,其中有nvidia-xxx),但升级后的驱动很可能不支持你的硬件.
推荐从https://developer.nvidia.com/cuda-downloads下载run脚本安装,脚本安装会提示你是否升级显卡驱动,此时选No即可.安装后还需要设置一些bin和lib的环境变量.cuda有很多版本,需要找到与显卡驱动匹配的版本,否则安装后还是找不到gpu.

4) Tensorflow_gpu

Tensorflow有gpu和cpu两个版本,简单安装中安装的是cpu版本,gpu版本则需要系统中安装cuda和libcudnn,且与Tensorflow匹配.比如:最新的Tensorflow需要cude-8.0版本和cudnn-6.0与之匹配,其它版本会有各种各样奇怪的报错.安装命令如下:

$ sudo pip install tensorflow_gpu

也可以从git中下载tensorflow最新代码编译,不过编译过程也需要安装bazel等工具支持,比较麻烦.
我安装成功时使用的是用pip安装tensorflow_gpu,同时安装了cuda_8.0.44_linux.run和cudnn-8.0-linux-x64-v6.0.tgz(tgz包约200M,用15M的包会报错找不到函数)

测试程序
安装后,可用以下程序测试tensorflow是否正常运行

import tensorflow as tf

hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
a = tf.constant(10)
b = tf.constant(32)
print(sess.run(a + b))

5) Theano

Theano也是基本于cuda调用GPU的,相对于Tensorflow要简单一些,它对cuda的版本要求不严格,只要在配置文件中设置正常即可调用GPU
i. 配置文件

$ vi ~/.theanorc
内容如下
[global]
device=gpu
floatX=float32

[nvcc]
optimizer=None

ii. 测试程序

from theano import function, config, shared, sandbox  
import theano.tensor as T  
import numpy  
import time  
  
vlen = 10 * 30 * 768  # 10 x #cores x # threads per core  
iters = 1000  
  
rng = numpy.random.RandomState(22)  
x = shared(numpy.asarray(rng.rand(vlen), config.floatX))  
f = function([], T.exp(x))  
print(f.maker.fgraph.toposort())  
t0 = time.time()  
for i in range(iters):  
    r = f()  
t1 = time.time()  
print("Looping %d times took %f seconds" % (iters, t1 - t0))  
print("Result is %s" % (r,))  
if numpy.any([isinstance(x.op, T.Elemwise) for x in f.maker.fgraph.toposort()]):  
    print('Used the cpu')  
else:  
    print('Used the gpu')  

6. 参考

1) 《我最喜欢的9个 Python深度学习库》

http://blog.csdn.net/u013886628/article/details/51819142

2) 《Ubuntu16.04+cuda8.0+caffe安装教程》

http://blog.csdn.net/autocyz/article/details/52299889/


技术文章定时推送

请关注公众号:算法学习分享