Python边学边用 - Python based Deeplearning Framework

写在前面

本文调研了网络上,主要是GitHub上,的一些基于Python或者Python可用的深度学习框架,用于对基于Python的深度学习框架的前期了解。资料完全来源于网络,文末附有所有参考链接。


GitHub关注度

Last Update: 2016.08.09 

 

项 目 名 称

Stars

项目介绍

TensorFlow

29622

使用数据流图计算可扩展机器学习问题

Caffe

11799

Caffe是一个高效的开源深度学习框架

Neural Style

10148

Torch实现的神经网络算法

Deep Dream

9042

Deep Dream,一款图像识别工具

Keras

7502

一款Python实现的深度学习库,包括卷积神经网络、递归神经网络等。运行在Theano和TensorFlow之上。

Roc AlphaGo

7170

学生主导的一个独立项目,从新实现了 DeepMind在2016 Nature发表的内容, 《用深度神经网络和树搜索学习围棋》 (Nature 529, 484-489, 28 Jan 2016).

TensorFlow Models

6671

基于TensorFlow开发的模型

Neural Doodle

6275

运用深度神经网络将涂鸦变为优雅的艺术品,从照片生成无缝纹理,转变图片风格,进行基于实例的提升,等等…还有更多!(语义风格传递的实现)

CNTK

5957

计算网络工具(Computational Network Toolkit,CNTK)

TensorFlow Examples

5872

初学者的TensorFlow教程和代码示例。

ConvNet JS

5231

基于Javascript的深度学习库。在浏览器中训练卷积神经网络模型(或者普通模型)。

Torch

5133

Torch7,深度学习库。

OpenFace

4855

基于深度学习网络的面部识别。

MXNet

4685

轻巧、便携、灵活的分布式/移动深度学习框架,支持Python, R, Julia, Scala, Go, Javascript等等语言。

Nupic

4364

智能计算的Numenta平台:一个脑启发式的计算智能和机器智能平台,基于皮层学习算法的生物精确神经网络模型。

Theano

4286

Theano 是一个 Python 库,用来定义、优化和模拟数学表达式计算,用于高效的解决多维数组的计算问题。

Leaf

4281

黑客的开源机器智能框架。

Char RNN

3820

多层递归神经网络的字符级别语言模型,基于Torch开发。

Neural Talk

3694

NeuralTalk是一个Python+numpy项目,用多模式递归神经网络描述图像。

deeplearning4j

3673

基于Hadoop和Spark的Java, Scala & Clojure深度学习工具。

TFLearn

3368

深度学习库,包括高层次的TensorFlow接口。

TensorFlow Playground

3352

神经网络模型示例。

OpenAI Gym

3020

一种用于开发和比较强化学习算法的工具包。

Magenta

2914

Magenta: 音乐和艺术的生成与机器智能

Colornet

2798

用神经网络模型给灰度图上色。

Neural Talk 2

2550

Torch开发的图像简介生成代码,运行在GPU上。

Image Analogies

2540

使用神经匹配和融合生成相似图形。

TensorFlow Tutorials

2413

Tensorflow,从基础原理到应用。

Lasagne

2355

基于Theano训练和构建神经网络的轻型函数库。

PyLearn2

2153

基于Theano的机器学习库。

LISA-lab Deep Learning Tutorials

2134

深度学习教程笔记和代码。详情参见wiki页面。https://github.com/lisa-lab/DeepLearningTutorials

Neon

2121

Nervana™开发的一款快速、可扩展、易上手的Python深度学习框架.

Deep Learning Flappy Bird

1721

使用深度强化学习破解Flappy Bird游戏(深度 Q-学习).

Chainer

1573

一款灵活的深度学习神经网络框架。

Neural Story Teller

1514

看图讲故事的递归神经网络模型。

Deep Jazz

1229

基于Keras和Theano生成jazz的深度学习模型!

Brainstorm

1143

快速、灵活、有趣的神经网络。

Theano Tutorials

904

基于Theano的机器学习入门教程,从线性回归到卷积神经网络。

RNN Music Composition

904

一款生成古典音乐的递归神经网络工具。

Blocks

866

用于构建和训练神经网络模型的Theano框架。

TDB

860

TensorFlow的交互式、节点调试和可视化的工具。

Scikit Neural Net

849

深度神经网络入门工具,类似scikit-learn的分类器和回归模型。

Veles

760

分布式机器学习平台(Python, CUDA, OpenCL)

Deep Detect

759

基于C++11的深度学习接口和服务器,与Python绑定并支持Caffe。

TensorFlow DeepQ

759

基于Google Tensorflow的深度Q学习演示。

Caffe on Spark

724

基于Spark的Caffe。

Nolearn

702

神经网络库的抽象,著名的Lasagne。

 

 

Caffe

Caffe 是一种以表达清晰、高速和模块化为理念建立起来的深度学习框架。它是由伯克利视觉和学习中心(BVLC)和网上社区贡献者共同开发的。谷歌的 DeepDream 人工智能图像处理程序正是建立在 Caffe 框架之上。这个框架是一个 BSD 许可的带有 Python 接口的 C++库。

虽然Caffe本身并不是一个Python库,但它提供绑定到Python上的编程语言。

Caffe是一个广为人知、广泛应用的机器视觉库,将Matlab实现的快速卷积网络移植到了C和C++平台上(参见Steve Yegge关于一个芯片一个芯片地移植C++代码的博客,可以帮助你思考如何在速度和这种特定的技术债务之间进行权衡)。Caffe不适用于文本、声音或时间序列数据等其他类型的深度学习应用。与本文提到的其他一些框架相同,Caffe选择了Python作为其API。

Deeplearning4j和Caffe都可以用卷积网络进行图像分类,这是最先进的技术。与Caffe不同,Deeplearning4j支持任意芯片数的GPU并行运行,并且提供许多看似微不足道,却能使深度学习在多个并行GPU集群上运行得更流畅的功能。虽然在论文中被广泛引述,但Caffe主要用于为其Model Zoo网站提供已预定型的模型。Deeplearning4j正在开发将Caffe模型导入Spark的开发解析器。 

利与弊:

  • (+) 适合前馈网络和图像处理
  • (+) 适合微调已有的网络
  • (+) 定型模型而无需编写任何代码
  • (+) Python界面相当有用
  • (-) 需要用C++ / CUDA编写新的GPU层
  • (-) 不适合递归网络
  • (-) 用于大型网络(GoogLeNet、ResNet)时过于繁琐

 

TensorFlow

TensorFlow是使用数据流图进行数值计算的开源库(这是所有神经网络固有的特征)。最初由谷歌的机器智能研究机构内的Google Brain Team研究人员开发,此后库一直开源,并提供给公众。

相比于Theano ,TensorFlow的主要优点是分布式计算,特别是在多GPU的环境中(虽然这是Theano正在攻克的项目)。

· 目前TensorFlow还不支持所谓的“内联(inline)”矩阵运算,必须要复制矩阵才能对其进行运算。复制非常大的矩阵会导致成本全面偏高。TF运行所需的时间是最新深度学习工具的四倍。谷歌表示正在解决这一问题。

· 和大多数深度学习框架一样,TensorFlow是用一个PythonAPI编写的,通过C/C++引擎加速。这种解决方案并不适合Java和Scala用户群。

· TensorFlow的用途不止于深度学习。TensorFlow其实还有支持强化学习和其他算法的工具。

· 谷歌似乎也已承认TF的目标是招募人才。众所周知,他们最近公布了为期一年的谷歌大脑(Google Brain)人才培训项目。真是明智的举措。

· TensorFlow不提供商业支持,而谷歌也不太可能会从事支持开源企业软件的业务。谷歌的角色是为研究者提供一种新工具。

· 和Theano一样,TensforFlow会生成计算图(如一系列矩阵运算,例如z = simoid(x),其中x和z均为矩阵),自动求导。自动求导很重要,否则每尝试一种新的神经网络设计就要手动编写新的反向传播算法,没人愿意这样做。在谷歌的生态系统中,这些计算图会被谷歌大脑用于高强度计算,但谷歌还没有开放相关工具的源代码。TensorFlow可以算是谷歌内部深度学习解决方案的一半。

· 从企业的角度看,许多公司需要思考的问题在于是否要依靠谷歌来提供这些工具。 

利与弊:

  • (+) Python + NumPy
  • (+) 与Theano类似的计算图抽象化
  • (+) 编译时间比Theano快很多
  • (+) 用TensorBoard进行可视化
  • (+) 同时支持数据并行和模型并行
  • (-) 速度比其他框架慢
  • (-) 比Torch笨重许多;更难理解
  • (-) 已预定型的模型不多
  • (-) 计算图纯粹基于Python,所以速度较慢

 

Theano

主页:http://deeplearning.net/software/theano/

Github网址:https://github.com/Theano/Theano

 

Theano 是一种用于使用数列来定义和评估数学表达的 Python 库。它可以让 Python 中深度学习算法的编写更为简单。很多其他的库是以 Theano 为基础开发的。非常核心的是,Theano是一个Python库,用来定义、优化和评估涉及多维数组的数学表达式。 Theano通过与numpy的紧密集成,透明地使用GPU来完成这些工作。

Theano大部分代码是使用Cython编写,Cython是一个可编译为本地可执行代码的Python方言,与仅仅使用解释性Python语言相比,它能够使运行速度快速提升。最重要的是,很多优化程序已经集成到Theano库中,它能够优化你的计算量并让你的运行时间保持最低。

如果速度的提升还不能满足你,它还内置支持使用CUDA在GPU上执行那些所有耗时的计算。所有的这一切仅仅只需要修改配置文件中的标志位即可。在CPU上运行一个脚本,然后切换到GPU,而对于你的代码,则不需要做任何变化。

同时我们应该注意到,尽管Theano使用Cython和CUDA对其性能大大提升,但你仍然可以仅仅使用Python语言来创建几乎任何类型的神经网络结构。

深度学习领域的学术研究者大多依赖Theano,Theano是深度学习框架中的元老,用Python编写。Theano和NumPy一样,是处理多维数组的学习库。Theano可与其他学习库配合使用,非常适合数据探索和研究活动。

现在已有大量基于Theano的开源深度学习库,包括Keras、 Lasagne和Blocks。这些学习库试着在Theano有时不够直观的界面之上添加一层便于使用的API。(截至2016年3月,另一个与Theano相关的学习库Pylearn2似乎已经停止开发。)

相比之下,Deeplearning4j的目标是成为深度学习领域的Scikit-learn,力求以可扩展、多个GPU或CPU并行的方式让尽可能多的控制点实现自动化,在需要时与Hadoop和Spark集成。 

利与弊:

  • (+) Python + NumPy
  • (+) 计算图是良好的抽象化方式
  • (+) RNN与计算图匹配良好
  • (-) 原始的Theano级别偏低
  • (+) 高级的包装界面(Keras、Lasagne)减少了使用时的麻烦
  • (-) 错误信息可能没有帮助
  • (-) 大型模型的编译时间可能较长
  • (-) 比Torch笨重许多;更难理解
  • (-) 对已预定型模型的支持不够完善

 

 

Lasagne

Github网址:https://github.com/Lasagne/Lasagne

Lasagne 是一个轻量级的库,它可以在Theano 中建立和训练神经网络。它简单、透明、模块化、实用、专一而克制。

Lasagne是Theano中用于构建和训练网络的轻量级库。这里的关键词是轻量级的,也就意味着它不是一个像Keras一样围绕着Theano的重包装的库。虽然这会导致你的代码更加繁琐,但它会把你从各种限制中解脱出来,同时还可以让您根据Theano进行模块化的构建。

简而言之:Lasagne的功能是Theano的低级编程和Keras的高级抽象之间的一个折中。

Lasagne不只是一个美味的意大利菜,也是一个与Blocks和Keras有着相似功能的深度学习库,但其在设计上与它们有些不同。

下面是Lasagne的一些设计目的:

· 简单化:它应该是易于使用和扩展的机器学习库。每添加一个特征,就应该考虑其对易用性和扩展性的影响。每一个抽象概念的加入都应该仔细检查,以确定增加的复杂性是否合理。

· 小接口:尽可能少的类和方法。尽可能依赖Theano的功能和数据类型,遵循Theano的规定。如果没有严格的必要,不要在类中封装东西。这会使它更容易使用库并且扩展它(不需要有太多的认知)。

· 不碍事:未使用的功能应该是不可见的,用户不会考虑他们不使用的功能。尽可能单独的使用库文件中的组件。

· 透明性:不要试图掩盖Theano,尽量以Python或NumPy数据类型的形式将函数和方法返回给Theano表达式。

· 重点:遵循Unix哲学“做一件事,并把它做好”,重点集中在前馈神经网络。

· 实用主义:使普通用例更易于使用,这要比支持每一个可能的用例更为重要。

 

Keras

主页:http://keras.io/

Github网址:https://github.com/fchollet/keras

 

Keras 是类似 Torch 的一个精简的,高度模块化的神经网络库。Theano 在底层帮助其优化 CPU 和 GPU 运行中的张量操作。

Keras是一个最低限度的、模块化的神经网络库,可以使用Theano或TensorFlow作为后端。Keras最主要的用户体验是,从构思到产生结果将会是一个非常迅速的过程。

在Keras中架构网络设计是十分轻松自然的。它包括一些state-of-the-art中针对优化(Adam,RMSProp)、标准化(BatchNorm)和激活层(PReLU,ELU,LeakyReLU)最新的算法。

Keras也非常注重卷积神经网络,这也是我十分需要的。无论它是有意还是无意的,我觉得从计算机视觉的角度来看这是非常有价值的。

更重要的是,你既可以轻松地构建基于序列的网络(其中输入线性流经网络)又可以创建基于图形的网络(输入可以“跳过”某些层直接和后面对接)。这使得创建像GoogLeNet和SqueezeNet这样复杂的网络结构变得容易得多。

我认为Keras唯一的问题是它不支持多GPU环境中并行地训练网络。这可能会也可能不会成为你的大忌。

如果我想尽快地训练网络,那么我可能会使用mxnet。但是如果我需要调整超参数,我就会用Keras设置四个独立的实验(分别在我的Titan X GPUs上运行)并评估结果。

Keras是一个简约的、高度模块化的神经网络库,设计参考了Torch,基于Theano和Python语言编写,支持GPU和CPU。它的开发侧重于实现快速试验和创造新的深度学习模型。

如果你需要具有以下功能的深度学习库,采用Keras就恰到好处:

· 可以很容易地、快速地建立原型(通过总体模块化,极简化并且可扩展化)。

· 支持卷积网络和递归网络,以及两者的组合。

· 支持任意连接方式(包括多输入多输出训练)。

Keras库与其他采用Theano库的区别是Keras的编码风格非常简约、清晰。它把所有的要点使用小类封装起来,能够很容易地组合在一起并创造出一种全新的模型。

 

Blocks

Github网址:https://github.com/mila-udem/blocks

Blocks 是一种帮助你在 Theano 之上建立神经网络模型的框架。呈现出一个用户友好型的API。

Blocks是一个非常模块化的框架,有助于你在Theano上建立神经网络。目前它支持并提供的功能有:

  • 构建参数化Theano运算,称之为“bricks”。
  • 在大型模型中使用模式匹配来选择变量以及“bricks”。
  • 使用算法优化模型。
  • 训练模型的保存和恢复。
  • 在训练过程中检测和分析值(训练集以及测试集)。
  • 图形变换的应用,如dropout。

 

Pylearn2

主页:http://deeplearning.net/software/pylearn2/

Github网址:https://github.com/lisa-lab/pylearn2

 

Pylearn2 是一个引用大量如随机梯度(Stochastic Gradient)这样的模型和训练算法的库。它在深度学习中被广泛采用,这个库也是以 Theano 为基础的。

Pylearn2和Theano由同一个开发团队开发,Pylearn2是一个机器学习库,它把深度学习和人工智能研究许多常用的模型以及训练算法封装成一个单一的实验包,如随机梯度下降。

你也可以很轻松的围绕你的类和算法编写一个封装程序,为了能让它在Pylearn2上运行,你需要在一个单独的YAML格式的配置文件中配置你整个神经网络模型的参数。

除此之外,它还有很多数据集及其预编译好的软件包,所以,你现在就可以直接使用MNIST数据集开始做实验了!

deepy

DeepPy 是一种建立在 Mumpy 之上的 Python 化的深度学习框架。

 

mxnet

虽然在mxnet中站立一个网络可能需要较多的代码,但它会提供给你惊人数量的语言绑定(C ++、Python、R、JavaScript等)。

Mxnet库真正出色的是分布式计算,它支持在多个CPU / GPU机训练你的网络,甚至可以在AWS、Azure以及YARN集群。

它确实需要更多的代码来设立一个实验并在mxnet上运行(与Keras相比),但如果你需要跨多个GPU或系统分配训练,我推荐mxnet。

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

 

 

sklearn-theano

有时候你并不需要终端到终端的培养一个卷积神经网络。相反,你需要把CNN看作一个特征提取器。当你没有足够的数据来从头培养一个完整的CNN时它就会变得特别有用。仅仅需要把你的输入图像放入流行的预先训练架构,如OverFeat、AlexNet、VGGNet或GoogLeNet,然后从FC层提取特征(或任何您要使用的层)。

总之,这就是sklearn-theano的功能所在。你不能用它从头到尾的训练一个模型,但它的神奇之处就是可以把网络作为特征提取器。当需要评估一个特定的问题是否适合使用深度学习来解决时,我倾向于使用这个库作为我的第一手判断。

sci-kit learn

Python的默认开源机器学习框架。

 

Brainstorm

http://python.ctolib.com/article/goGitHub/brainstorm.html

Brainstorm makes working with neuralnetworks fast, flexible and fun.

Combining lessons from previous projectswith new design elements, and written entirely in Python, Brainstorm has beendesigned to work on multiple platforms with multiple computing backends.

 

Brainstorm is under active development andis currently in beta.

The currently available feature setincludes recurrent (simple, LSTM, Clockwork), 2D convolution/pooling, Highwayand batch normalization layers. API documentation is fairly complete and we arecurrently working on tutorials and usage guides.

Brainstorm abstracts computations via handlers witha consistent API. Currently, two handlers are provided: NumpyHandler forcomputations on the CPU (through Numpy/Cython) and PyCudaHandler forthe GPU (through PyCUDA and scikit-cuda).

 

 

nolearn

Keras把 Theano和TensorFlow包装成了更具人性化的API,而nolearn也为Lasagne做了相同的事。此外,nolearn中所有的代码都是与scikit-learn兼容的,这对我来说绝对是个超级的福利。

我个人不使用nolearn做卷积神经网络(CNNs),但你当然也可以用(我更喜欢用Keras和mxnet来做CNNs)。我主要用nolearn来制作Deep Belief Networks (DBNs)。

nolearn 包含大量其他神经网络库中的包装器和抽象(wrappers and abstractions),其中最值得注意的是 Lasagne,其中也包含一些机器学习的实用模块。

 

Chainer

https://github.com/pfnet/chainer

  • Official site: http://chainer.org/
  • Official document: http://docs.chainer.org/
  • github: https://github.com/pfnet/chainer
  • Forum: https://groups.google.com/forum/#!forum/chainer

 

Chainer 连接深度学习中的算法与实现,它强劲、灵活而敏锐,是一种用于深度学习的灵活的框架。

Neon

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

 

VELES

VELES 是分布式深度学习应用系统,用户只需要提供参数,剩下的都可以交给 VELES。VELES 使用 Python 编写,使用 OpenCL 或者 CUDA,利用基于 Flow 的编程。

VELES 是三星开发的另一个 TensorFlow。

主要特性:

  • 只需一个命令就可以在 Notebook 或者 Cluster 上部署 VELES
  • 从 250+ 优化单元中创建模型
  • 使用 Loaders 在 Go 上分析和服务数据集
  • 在 PC 或者高性能集群训练
  • 交互式监控训练进程
  • 公布结果
  • 自动提取训练模型,跟一个应用一样
  • 可以在云上运行

VELES 包含以下几个部分:

  • 平台 - https://github.com/Samsung/veles
  • Znicz 插件 - Neural Network engine
  • Mastodon - Veles <-> Java bridge for Hadoop etc.
  • SoundFeatureExtraction - 音频特性提取库

 

 

CNTK

CNTK是微软的开源深度学习框架。CNTK的全称是“计算网络工具包。”此学习库包括前馈DNN、卷积网络和递归网络。CNTK提供基于C++代码的Python API。虽然CNTK遵循一个比较宽松的许可协议,却并未采用ASF 2.0、BSD或MIT等一些较为传统的许可协议。

 

DeepLearning4j

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

 

人脸/图像识别

语音搜索

语音转文字(Speechto text)

垃圾信息过滤(异常侦测)

电商欺诈侦测

 

Genism

Genism 是一个部署在 Python 编程语言中的深度学习工具包,用于通过高效的算法处理大型文本集。

Hebel

Hebel 是一个在 Python 中用于带有神经网络的深度学习的库,它通过 PyCUDA 使用带有 CUDA 的 GPU 加速。它可实现大多数目前最重要的神经网络模型,提供了多种不同的激活函数和训练方式,如动量,Nesterov 动量,退出(dropout)和前期停止(early stopping)。

CXXNET

CXXNET 是一种快速,简明的分布式深度学习框架,它以 MShadow 为基础。它是轻量级可扩展的 C++/CUDA 神经网络工具包,同时拥有友好的 Python/Matlab 界面,可供机器学习的训练和预测使用。

deepnet

deepnet 是一种基于 GPU 的深度学习算法的 Python实现,比如:前馈神经网络、受限玻尔兹曼机、深度信念网络、自编码器、深度玻尔兹曼机和卷积神经网络。


Ref

http://python.jobbole.com/81135/

https://www.zhihu.com/question/29412143

http://python.jobbole.com/81896/

http://www.36dsj.com/archives/37254

http://www.jiqizhixin.com/article/1621

http://dataunion.org/24888.html

https://deeplearning4j.org/cn/compare-dl4j-torch7-pylearn

http://itimetraveler.github.io/2016/08/12/%E3%80%90Machine%20Learning%E3%80%91Github%E4%B8%8A%E5%85%B3%E6%B3%A8%E6%9C%80%E5%A4%9A%E7%9A%8453%E4%B8%AA%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E9%A1%B9%E7%9B%AE/

https://www.oschina.net/p/veles

http://python.ctolib.com/brainstorm.html


你可能感兴趣的:(Python边学边用,python,github,框架,Deeplearning)