(读书笔记)各深度学习框架简要介绍

1.Tensorflow

官网:http://www.tensorflow.org

GitHub 网址:http://github.com/tensorflow/tensorflow

模型仓库网址:http://github.com/tensorflow/models

Tensorflow是由Google Brain开发并开源的相对高阶的机器学习库,用户可以方便地用它设计神经网络结构,而不必为了追求高效率的实现亲自写C++或CUDA代码。Tensorflow支持自动求导。Tensorflow核心代码由C++编写,简化了线上部署的复杂度,使之能在手机这类内存和CPU资源都很紧张的设备上也可运行复杂模型。除了支持C++之外,Tensorflow还有Python、Go、Java、Julia、Node.js、R等语音的接口支持。不过使用Python时有一个影响效率的问题,每一个mini-batch要从Python中feed到网络中,这个过程在mini-batch的数据量很小或者运行时间很短时,可能会带来比较大的延迟。

Tensorflow是一种数据流式的框架,这使得它支持非常自由的算法表达,除了深度学习以及机器学习的算法外,还可以实现偏微分方程求解之类的方法。事实上,只要可以将计算表示成计算图形式,就可以使用Tensorflow。用户可以写内层循环代码控制计算图分支的计算,Tensorflow会自动将相关的分支转化为子图并执行迭代运算。

在数据并行模式上,Tensorflow和Parameter Server很像,但Tensorflow有独立的Variable node,不想其他框架有一个全局统一的参数服务器,因此参数同步更加自由。

Tensorflow另外一个重要特点是它灵活的移植性,可以经过很少的修改甚至不需要修改就可以轻松部署到有任意数量CPU或GPU的PC、服务器或者移动设备上。相比于Theano,Tensorflow还有一个优势就是它极快的编译速度,在定义新网络结构时代价会很小。

Tensorflow还具有十分强大的可视化组件Tensorboard,可以帮助可视化网络结构和训练过程,对于观察复杂的网络结构和监控长时间、大规模的训练很有帮助。Tensorboard目前支持5种可视化:标量(scalars)、图片(images)、音频(audio)、直方图(histgrams)和计算图(computation graph)。标量可以用来监控loss、学习率、准确率等值的变化趋势;图片可以用来展示训练过程用户设定保存的图片,如重建效果图或者matplotlib绘制的图片等;计算图则可以完全展示全部的计算图,并且支持缩放拖拽和查看节点属性。

Tensorflow的一个薄弱地方在于计算图必须构建为静态图,这让很多计算变得难以实现,尤其是序列预测中经常使用的beam search。

2.Caffe

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

GitHub:http://github.com/BVLC/Caffe

Caffe全称为Convolutional Architecture for Fast Feature Embedding,由伯克利视觉学中心(BVLC)发布和维护。有事主要包括以下几点:

(1)容易上手,网络结构都是以配置文件形式定义,不需要用代码涉及网络

(2)训练速度快,能够训练state-of-the-art的模型与大规模的数据

(3)组建模块化,可以方便地拓展到新的网络模型和学习任务上

Caffe的核心概念是layer,每一个神经网络的模块都是一个layer。layer接收输入数据,并通过内部计算产生输出数据。在设计网络结构时,通过写protobuf配置文件把各个layer拼接在一起即可构成完整的网络。每一个layer需要定义两种运算:正向传播的预测过程和反向传播的训练过程。实现新的layer时,需要将两种计算过程的函数都实现,这部分计算需要用户自己编写C++或CUDA(运用GPU计算时)代码。Caffe最开始设计的目标只针对图像,没有考虑文本、语音或时间序列数据,因此Caffe对于卷积神经网络的支持很好,但对时间序列RNN、LSTM等支持不是特别充分。同时,基于layer的模式在定义RNN结构时也比较麻烦。

Caffe的一大优势是拥有大量训练好的经典模型(ALexNet、VGG、Inception)乃至其他state-of-the-art的模型(ResNet等),收藏在其Model Zoo(http://github.com/BVLC/caffe/wiki/Model-Zoo)。由于Caffe的底层是基于C++的,因此其移植性也十分良好。Caffe也提供了python语言接口pycaffe,不过,通常用户还是使用protobuf配置文件定义神经网络结构,在使用命令行进行训练或预测。protobuf文件是一个类似JSON类型的.prototxt文件,其中使用许多顺序连接的layer来描述神经网络结构,Caffe的执行程序会提取这些文件并按其定义来训练网络。不过在.prototxt文件内部设计网络结构可能会比较受限,没有像Tensorflow或者Keras那么方便自由。而且,Caffe的配置文件不能用编程的方式调整超参数,也没有提供像Scikit-learn那样好用的estimator可以方便地进行交叉验证、超参数的Grid Search等操作。

3.Theano

官网:http://www.deeplearning.net/software/theano/

GitHub:http://github.com/Theano/Theano

Theano诞生于2008年,由蒙特利尔大学Lisa Lab团队开发并维护,是一个高性能的符号计算及深度学习库,被认为是这类库的始祖之一。Theano的核心是一个数学表达式的编译器,专门为处理大规模神经网络训练的计算而设计。Theano的主要优势如下:

(1)集成Numpy,可以直接使用Numpy的ndarray,API接口学习成本低

(2)计算稳定性好,比如可以精准地计算输出值很小的函数(如log(1+x))

(3)动态地生成C或者CUDA代码,用以编译成高效的机器代码,并链接各种可以加速的库,如BLAS、CUDA等

虽然Theano支持Linux、Mac和Windows,但是没有底层C++的接口,因此模型的部署十分不方便,依赖于各种python库,并且不吃只各种移动设备,所以几乎没有在工业生产环境的应用,更多地被当作一个研究工具。

Theano在运算时需要将用户的python代码转换成CUDA代码,再编译为二进制可执行文件,编译复杂模型的时间非常久。此外,导入过程也很慢,而且一旦选择了某块GPU,就无法切换到其他设备。不过,Theano在训练简单网络(如很浅的MLP)时性能可能比Tensorflow好,因为全部代码都是运行时编译,不需要想Tensorflow那样每次feed mini-batch时都得通过低效的python循环来实现。

Theano是完全基于python的符号计算库,用户定义的各种运算,Theano可以自动求导。Theano对CNN和RNN的支持都很好,实现起来简单高效,这让Theano可以支持大部分state-of-the-art的网络。Theano派生出了大量基于它的深度学习库,其中就有Keras、Lassage等,体现了Theano在深度学习届的基石作用。尽管其十分重要,但直接使用Theano设计大型神经网络还是太繁琐了。

4.Torch

官网:http://torch.ch

GitHub:http://github.com/torch/torch7

Torch的定位就是LuaJIT上的一个高效科学计算哭,支持大量的机器学习算法,同时以GPU上的计算优先。Torch包含大量的机器学习、计算机视觉、信号处理、并行运算、图像、视频、音频、网络处理的库,并且拥有大量训练好的深度学习模型。同时,它还支持设计非常复杂的神经网络的拓扑图结构,在并行化到CPU和GPU上,在Torch上设计新的layer是相对简单的。Torch使用的语言是Lua,官方给出了一下几点使用LuaJIT而不使用Python的理由:

(1)LuaJIT的通用计算性能远胜于Python,而且可以直接在LuaJIT中操作C的pointers

(2)Torch的框架,包含Lua是自洽的,而完全基于Python的程序对不同平台、系统移植性较差,依赖的外部库较多

(3)LuaJIT的FFI拓展接口非常易学,可以方便地链接其他库到Torch中

Torch的nn库支持神经网络、自编码器、线性回归、CNN、RNN等,同时支持定制的损失函数及梯度计算。Lua做数据预处理等操作可以随意使用循环等,而不必像Python那样担心性能问题,也不需要学习Python中各种加速运算的库。但Lua流行度不比Python,学习成本较大。Torch和Caffe一样也是基于layer的连接来定义网络,其新的layer依然需要用户自己实现,但方式和定义网络的方式类似,非常简便,这点和Caffe不同。同时,Torch属于命令式编程模式,不想Theano、Tensorflow属于声明式编程(计算图是预定义的静态的结构),所以用它实现某些复杂操作(如beam search)要更为方便。

5.Keras

官网:http://keras.io

GitHub:http://github.com/fchollet/keras

Keras是一个崇尚极简、高度模块化的神经网络库,使用Python实现,并可以同时运行在Tensorflow和Theano后端上。它旨在让用户进行最快速的原型试验,让想法变为结果的过程最短,相比Theano和Tensorflow的通用性,Keras则专精于深度学习。它提供目前为止最方便的API,用户只需要将高级的模块拼在一起,就可以设计神经网络。他同时支持CNN和RNN,支持级联的模型或任意的图结构模型(可以让某些数据跳过某些layer和后面的layer对接,使得创建Inception等复杂网络更为容易),从CPU上计算切换到GPU加速无须任何代码改动。

Keras的所有模块都是简洁、易懂、完全可配置、可随意插拔的,并且基本上没有任何使用限制,神经网络、损失函数、优化器、初始化方法、激活函数和正则化等模块都是可以随便组合的。同时,新的模块也很容易添加,这使得Keras非常适合最前沿的研究。Keras最大的问题可能是目前无法直接使用多GPU,所以对大规模数据处理速度没有其他支持多GPU或分布式的框架块。Keras的编程模型设计和Torch很想,但相比Torch,Keras构建在Python上,有一套完整的科学计算工具链。

6.CNTK

官网:http://cntk.ai

GitHub:http://github.com/Microsoft/CNTK

CNTK(Computational Network Toolkit)是微软研究院(MSR)开源的深度学习框架,在语音识别领域的应用尤其广泛。CNTK通过一个有向图将神经网络描述为一系列的运算操作,这个有向图中子节点代表输入或网络参数,其他节点代表各种矩阵运算。CNN支持各类前馈网络,也支持自动求导。

CNTK设计是性能导向的,在CPU、单/多GPU以及GPU集群上都有优异的表现。CNTK拥有很高的灵活度,可以和Caffe一样通过配置文件定义网络结构,且支持构建任意的计算图,支持AdaGrad、RmsProp等优化方法。同时,CNTK还将支持其他语言的绑定,包括Python,C++和C#,使得用户可以用编程的方式涉及网络结构。PC上支持Linux、Mac和Windows,但是目前不支持ARM架构,限制了在移动设备上的发挥。

7.其他深度学习框架

I.Lasagne

官网:http://lasagne.readthedocs.io

GitHub:http://github.com/Lasagne/Lasagne

II.MXNet

官网:http://mxnet.io

GitHub:http://github.com/dmlc/mxnet

III.DIGITS

官网:http://developer.nvidia.com/digits

GitHub:http://github.com/NVIDIA/DIGITS

IV.Deeplearning4J

官网:http://deeplearning4j.org

GitHub:http://github.com/deeplearning4j/deeplearning4j

V.Chainer

官网:http://chainer.org

GitHub:http://github.com/pfnet/chainer

VI.Leaf

官网:http://autumnai.com/leaf/book

GitHub:http://github.com/autumnai/leaf

VII.DSSTNE

GitHub:http://github.com/amznlabs/amazon-dsstne

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值