13个最常用的Python深度进修库
当前位置:以往代写 > Python教程 >13个最常用的Python深度进修库
2019-06-14

13个最常用的Python深度进修库

假如你对深度进修和卷积神经网络感乐趣,可是并不知道从那边开始,也不知道利用哪种库,那么这里就为你提供了很多辅佐。

在这篇文章里,我具体解读了9个我最喜欢的Python深度进修库。

这个名单并不详尽,它只是我在计较机视觉的职业生涯中利用并在某个时间段发明出格有用的一个库的列表。

这个中的一些库我比别人用的多许多,尤其是Keras、mxnet和sklearn-theano。

其他的一些我是间接的利用,好比Theano和TensorFlow(库包罗Keras、deepy和Blocks等)。

别的的我只是在一些出格的任务顶用过(好比nolearn和他们的Deep Belief Network implementation)。

这篇文章的目标是向你先容这些库。我发起你当真相识这里的每一个库,然后在某个详细事情情境中你就可以确定一个最合用的库。

我想再次重申,这份名单并不详尽。另外,由于我是计较机视觉研究人员并恒久活泼在这个规模,对卷积神经网络(细胞神经网络)方面的库会存眷更多。

我把这个深度进修库的列表分为三个部门。

第一部门是较量风行的库,你大概已经很熟悉了。对付这些库,我提供了一个通俗的、高条理的概述。然后,针对每个库我具体讲解了我的喜欢之处和不喜欢之处,并罗列了一些适当的应用案例。

第二部门进入到我小我私家最喜欢的深度进修库,也是我日常事情中利用最多的,包罗:Keras、mxnet和sklearn-theano等。

最后,我对第一部门中不常常利用的库做了一个“福利”板块,你或者还会从中发明有用的可能是在第二板块中我还没有实验过但看起来很有趣的库。

接下来就让我们继承摸索。

 

针对初学者:

Caffe

提到“深度进修库”就不行能不说到Caffe。事实上,自从你打开这个页面进修深度进修库,我就敢打保票你必定传闻Caffe。

那么,毕竟Caffe是什么呢?

Caffe是由Berkeley Vision and Learning Center(BVLC)成立的深度进修框架。它是模块化的,速度极快。并且被应用于学术界和财富界的start-of-the-art应用措施中。

事实上,假如你去翻阅最新的深度进修出书物(也提供源代码),你就很大概会在它们相关的GitHub库中找到Caffe模子。

固然Caffe自己并不是一个Python库,但它提供绑定到Python上的编程语言。我们凡是在新规模开辟网络的时候利用这些绑定。

我把Caffe放在这个列表的原因是它险些被应用在各个方面。你可以在一个空缺文档里界说你的模子架构息争决方案,成立一个JSON文件范例的.prototxt设置文件。Caffe二进制文件提取这些.prototxt文件并培训你的网络。Caffe完成培训之后,你可以把你的网络和颠末度类的新图像通过Caffe二进制文件,更好的就直接通过Python或MATLAB的API。

固然我很喜欢Caffe的机能(它天天可以在K40 GPU上处理惩罚60万张图片),但对比之下我更喜欢Keras和mxnet。

主要的原因是,在.prototxt文件内部构建架构大概会变得相当乏味和无聊。更重要的是, Caffe不能用编程方法调解超参数!由于这两个原因,在基于Python的API中我倾向于对答允我实现终端到终端联播网的库倾斜(包罗交错验证和调解超参数)。

Theano

在最开始我想说Theano是瑰丽的。假如没有Theano,我们基础不会到达现有的深度进修库的数量(出格是在Python)。同样的,假如没有numpy,我们就不会有SciPy、scikit-learn和 scikit-image,,同样可以说是关于Theano和深度进修更高级此外抽象。

很是焦点的是,Theano是一个Python库,用来界说、优化和评估涉及多维数组的数学表达式。 Theano通过与numpy的细麋集成,透明地利用GPU来完成这些事情。

固然可以操作Theano成立深度进修网络,但我倾向于认为Theano是神经网络的基石,同样的numpy是作为科学计较的基石。事实上,大大都我在文章中提到的库都是环绕着Theano,使本身变得越发便利。

不要误会我的意思,我爱Theano,我只是不喜欢用Theano编写代码。

在Theano建树卷积神经网络就像只用本机Python中的numpy写一个定制的支持向量机(SVM),虽然这个比拟并不是很完美。

你可以做到吗?

虽然可以。

它值得耗费您的时间和精神吗?

嗯,也许吧。这取决于你是否想挣脱初级别或你的应用是否需要。

就小我私家而言,我甘愿利用像Keras这样的库,它把Theano包装成更有人性化的API,同样的方法,scikit-learn使呆板进修算法事情变得越发容易。

TensorFlow

与Theano雷同,TensorFlow是利用数据流图举办数值计较的开源库(这是所有神经网络固有的特征)。最初由谷歌的呆板智能研究机构内的Google Brain Team研究人员开拓,从此库一直开源,并提供应公家。

对比于Theano ,TensorFlow的主要利益是漫衍式计较,出格是在多GPU的情况中(固然这是Theano正在攻陷的项目)。

除了用TensorFlow而不是Theano替换Keras后端,对付TensorFlow库我并没有太多的履历。然而在接下来的几个月里,我但愿这有所改变。

Lasagne

#p#分页标题#e#

Lasagne是Theano顶用于构建和练习网络的轻量级库。这里的要害词是轻量级的,也就意味着它不是一个像Keras一样环绕着Theano的重包装的库。固然这会导致你的代码越发繁琐,但它会把你从各类限制中摆脱出来,同时还可以让您按照Theano举办模块化的构建。

简而言之:Lasagne的成果是Theano的初级编程和Keras的高级抽象之间的一个折中。

 

我最喜欢的:

Keras

假如我必需选出一个最喜欢的深度进修Python库,我将很难在Keras和mxnet中做出决议——但最后,我想我会选Keras。

说真的,Keras的长处我说都说不完。

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上运行)并评估功效。

mxnet

我第二喜欢的深度进修Python库无疑就是mxnet(重点也是练习图像分类网络)。固然在mxnet中站立一个网络大概需要较多的代码,但它会提供应你惊人数量的语言绑定(C ++、Python、R、JavaScript等)。

Mxnet库真正精彩的是漫衍式计较,它支持在多个CPU / GPU机练习你的网络,甚至可以在AWS、Azure以及YARN集群。

它确实需要更多的代码来设立一个尝试并在mxnet上运行(与Keras对比),但假如你需要跨多个GPU或系统分派练习,我推荐mxnet。

sklearn-theano

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

总之,这就是sklearn-theano的成果地址。你不能用它从新到尾的练习一个模子,但它的神奇之处就是可以把网络作为特征提取器。当需要评估一个特定的问题是否适合利用深度进修来办理时,我倾向于利用这个库作为我的第一手判定。

nolearn

我在PyImageSearch博客上用过屡次nolearn,主要是在我的MacBook Pro长举办一些劈头的GPU尝试和在Amazon EC2 GPU实例中举办深度进修。

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

我小我私家不利用nolearn做卷积神经网络(CNNs),但你虽然也可以用(我更喜欢用Keras和mxnet来做CNNs)。我主要用nolearn来建造Deep Belief Networks (DBNs)。 

DIGITS

DIGITS并不是一个真正的深度进修库(固然它是用Python写的)。DIGITS(深度进修GPU培训系统)实际上是用于培训Caffe深度进修模式的web应用措施(固然我认为你可以破解源代码然后利用Caffe以外其他的后端举办事情,但这听起来就像一场恶梦)。

假如你曾经用过Caffe,那么你就会知道通过它的终端来界说.prototxt文件、生成图像数据、运行网络并禁锢你的网络练习是相当繁琐的。 DIGITS旨在通过让你在欣赏器中执行这些任务来办理这个问题。

另外,DIGITS的用户界面很是精彩,它可觉得你提供有代价的统计数据和图表作为你的模子练习。别的,你可以通过各类输入轻松地可视化网络中的激活层。最后,假如您想测试一个特定的图像,您可以把图片上传到你的DIGITS处事器或进入图片的URL,然后你的Caffe模子将会自动分类图像并把功效显示在欣赏器中。清洁利落!

Blocks

#p#分页标题#e#

说实话,固然我一直想实验,但停止今朝我简直从来没用过Blocks(这也是我把它包罗在这个列内外的原因)。就像很多个在这个列表中的其他库一样,Blocks成立在Theano之上,泛起出一个用户友好型的API。

deepy

假如让你猜deepy是环绕哪个库成立的,你会猜什么?

没错,就是Theano。

我记得在前一段时间用过deepy(做了初始提交),但在接下里的或许6-8个月我都没有碰它了。我规划在接下来的博客文章里再实验一下。

pylearn2

固然我从没有主动地利用pylearn2,但由于汗青原因,我以为很有须要把它包罗在这个列内外。 Pylearn2不只仅是一般的呆板进修库(职位雷同于scikit-learn),也包括了深度进修算法的实现。

对付pylearn2我最大的担心就是(在撰写本文时),它没有一个活泼的开拓者。正因为如此,对比于像Keras和mxnet这样的有努力维护的库,推荐pylearn2我尚有些踌躇。

Deeplearning4j

这本应是一个基于Python的列表,但我想我会把Deeplearning4j包罗在这里,主要是出于对他们所干事迹的无比崇拜——Deeplearning4j为JVM成立了一个开源的、漫衍式的深度进修库。

假如您在企业事情,你大概会有一个塞满了用过的Hadoop和MapReduce处事器的储存器。也许这些你还在用,也许早就不消了。

你奈何才气把这些沟通的处事器应用到深度进修里?

事实证明是可以的——你只需要Deeplearning4j。

    关键字:

在线提交作业