怎样让python深度学习模型在手机上跑

本文简要介绍了增强学习(RL),主要解释了其实现过程:讲述一些基本理论,然后走马观花地看一下为玩《战舰》游戏而训练神经网络的最小python程序。
我们这里要简要介绍一下增强学习(RL)——一种为了提高玩游戏效率的训练程序的通用技术。我们的目标是解释其实际实现:我们讲述一些基本理论,然后走马观花地看一下为玩《战舰》游戏而训练神经网络的最小python程序。
增强学习[RL]技术是一种可用于提高效玩游戏效率的学习算法。与督导机器学习[ML]方法一样,增强学习是从数据——这里是指过去玩游戏的数据——中进行学习。然而,尽管督导学习算法只是根据现有的数据进行训练,但RL还挑战如何在收集数据的过程中表现良好性能。具体地说,我们所追求的设计原则是
让程序从过去实例中识别好的战略,
通过连续地玩游戏快速地学习新的战略。
我们在这里特想让我们的算法快速学习的理由是在培训数据有限或者战略空间太大而难以进行穷尽搜索的情况下最富有成果地运用RL。正是在这种体制下督导技术面临困境而RL则闪耀着光芒。
我们在本贴中要回顾一般性的RL培训程序:策略梯度、深度学习方案。我们下一节要回顾一下这种办法背后的理论。随后,我们将粗略地演示一下培训神经网络来玩战舰游戏的 python 实现。
我们的python码可以从我们的github网页这里下载。它需要 jupyter, tensorflow, numpy, 和 matplotlib包。
策略梯度,深度RL
策略深度和深度RL有两个主要构件。下面我们要详述二者并描述它们是如何协作训练好的模型的。
一定深度RL算法的策略是一种神经网络,它将状态值ss映射为一定游戏行为 aa的概率。 换句话说,该网络的输入层接受环境的数字编码——游戏在特定时刻的状态。当输入通过网络馈送后,其输出层的值对应着我们现有每个行动可选的对数概率——我们可供选择的每个可能的行动都有一个输出节点。请注意如果我们肯定知道我们应采取的步骤,只有一个输出节点有一定的概率。但如果我们的网络不能肯定哪种行动最优时,那么就不只一个节点有一定的权值。
为了说明这一点,我们来图示一下下面“战舰”程序中所用的网络。(要回顾“战舰”的游戏规则请看注[1])简明起见,我们只用一维战舰网格。我们然后对我们对手的每个网格位置用一个输入神经元将我们对目前的环境知识进行编码。具体地说,我们对于每个神经元/下标运用下列编码:
在下面例图中,我们有五个输入神经元,因此游戏盘的大小是五。前三个神经元的值是-1-1 表明我们尚未轰炸这些网格点。最后两个分别是+1+1 和 00, 意味着战舰位于第四而不是第五的位置。
需要注意的是,在所显示的策略网输出层中,前三项值标为对数概率。这些值对应着每个下标的下次轰炸的概率。我们不能再次轰炸第四和第五个网格点,所以,尽管网络可能对这些神经元输出一些值,我们会忽略它们。
需要注意的是,在所显示的策略网输出层中,前三项值标为对数概率。这些值对应着每个下标的下次轰炸的概率。我们不能再次轰炸第四和第五个网格点,所以,尽管网络可能对这些神经元输出一些值,我们会忽略它们。 在我们继续前,我们注意到我们对我们的策略运用神经网络的理由是进行有效地归纳:对于象围棋这样有大量状态值的游戏来说,收集每个可能的游戏盘位置的数据并不可行。这正是ML算法所擅长的场合——根据过去的观测进行归纳从而对新局面做出很好的预测。为了将注意力放在RL上,我们不想在本贴中回顾ML算法(但你可以看看我们的库中的入门章节)。我们只是提请注意——利用这些工具,我们通过只培训游戏中有代表性的子集就能获得良好的性能而不必研究会非常庞大的整个集合。
为了训练RL算法,我们必须反复地进行游戏/得分过程:我们根据当前的策略玩游戏,根据与该网络输出的概率成比例的频率做出移动选择。如果所采取的行动得到好的结果,我们就要在往后提高这些行动的概率。
收益函数是我们用于对我们以前游戏的结果进行正式打分的工具——我们将鼓励我们的算法在游戏期间努力将该量最大化。它其实是RL算法的超级参数:可以使用许多不同的函数,并每个都得出不同的学习特征。对于我们的战舰程序来说,我们用下列函数
只要游戏日志完备,该函数考查在时间t0时所采取的行动a并返回命中值h(t)的加权和,以及该游戏所有未来步骤。在这里,如果我们在步骤t时命中,h(t)则为1,否则为0。
在到达(2)时, 我们承认并不对所有可能的收益函数集合进行仔细搜索。但我们肯定这一选择会有很好的游戏效果,它们有良好的目的性:具体地说,我们注意到加权项(0.5)t-t0(0.5)t-t0 能强烈地激发当前步骤的命中率 (对于在t0时命中,我们得到的收益为11 ), 但在(t0+1)(t0+1)时命中的行为在 t0t0 时也有收益—— 其值为0.50.5。同样,在 (t0+2)(t0+2) 时命中收益为0.250.25, 依此类推。 (2)的这种超前加权起到了鼓励有效探索棋局的作用:它迫使程序顾及有利于未来命中的步骤。 (2) 中出现的其他要素是减去h(t)?????????h(t)?。 这是随机网络会获得的预期收益。通过将该项除去,我们的网络只有表现超过随机选择才有收益——该收益是这一学习过程的净加速。
为了训练我们的算法在游玩期间收益最大化,我们运用了递减法。为了表现这一点,我们设想让我们的网络参数 θθ 在游戏的某些特定步骤发生改变。对所有可能的步骤进行平均,于是有了预期收益的梯度公式,
这里, p(a)p(a) 的值是我们网络行动的概率输出。
不过,我们通常无法求得上述最后一行的值。但我们可以用抽样值进行迫近:我们只是用我们当前网络玩游戏,因此我们用在第 ii次移动时所获得的实际收益取代上述的预期收益,
这里aiai 是所采取的行动, r(ai)r(ai)是获得的收益,可以通过反向传播求该对数的导数(对于那些熟悉神经网络的人来说:这是叉熵损失函数的导数,当你处理类似督导学习训练事例的事件时,可以用所选择行动 aiai 做为标记以应用该函数)。函数g^ig^i 提供理想梯度的噪声估计,但步骤多了会导致“随机”递减,一般推动我们朝着正确的收益最大化前进。
训练过程总结
总之,RL训练是迭代进行:要起动迭代步骤,首先我们用我们当前的策略网络玩游戏,随机地根据网络输出选择移动步骤。在游戏结束后,我们通过计算每次移动所获得的收益来对结果打分,例如在战舰游戏中,我们用(22)。 一旦完成这一步,我们就用 (44)来估计收益函数的梯度。最后,我们用αα小步长步骤参数更新网络参数 θ→θ+α∑g^iθ→θ+α∑g^i,
接着,我们用经过更新的网络继续玩新的游戏,依此类推。
要明白这一过程实际上是鼓励在练习中产生良好结果的行动,注意 (44) 与在步骤 ii中所获收益成比例的。因此,我们在 (44)的方向上调整参数,我们极力鼓励那些产生很大收益结果的行动。另外,收益为负的步骤受到抑制。网络按这种方式经过一段时间后将学会考察这一系统并提出可能产生最佳结果的步骤。
这说的是深度策略梯度RL的基础。我们现在回到我们战舰python示例上来。
Python 代码流程 — 战舰 RL
加载所需的包。
定义我们的网络——一个全面相联的三层系统。下面代码基本上是 tensorflow 标准本,通过了其第一教程就可得出。有一项非同凡响的事是我们已将(26)集的学习速度定为占位符值 (9) 。这将让我们用下列所观察到的捕获收益改变我们的步长。
其次,我们定义了让我们用我们的网络玩游戏的方法。变量TRAINNING决定了我们是否采取理想步骤或选择随机步骤。请注意该方法返回一组记录游戏过程的日志集。这些是训练所需要的。
我们收益函数的实现(2):
最后是我们的训练循环。我们反复地玩多次游戏,每次都记分,然后调整参数——用阿尔法乘以所获得收益得出学习速度。
运行上一单元,我们看到训练起作用了!下面例子通过将TRAINNING设为FALSE跟踪play_game()方法。这展示了一种智能步骤选择过程。
这里前五行是游戏盘编码——每一步都用(11)来填充网络。第二至最后一行是所选择的系列网络选择。最后一行是命中日志。请注意前两步很好地抽样了游戏盘不同地区。此后,所记录命中为 66。该算法然后智能地选择 77和 88,它能推断它们一定是战舰的最后位置。
下图进一步地描述了学习过程的特征。它将游戏平均长度(完全轰炸战舰所需步骤)与训练时间进行对照。该程序非常迅速地学到基础知识并随着时间推进而持续进步。
在本贴中,我们讲到RL的一种——即策略梯度、深度RL方案。该方法一般是当前最知名战略 ,偶尔也从其他方法中取样,最终实现策略的迭加改进。其两个主要成份是策略网络和收益函数。尽管网络结构设计通常是督导学习考虑得最多的地方,但在RL的情况下最费神的是收益函数。为了方便训练(依靠长远预测会放慢学习过程),好的选择应该是时间上尽可能地靠近。然而,收益函数常常也会损害到这一过程的最终目标(“赢”这场游戏——鼓励侧向追求,而一些侧向追求是不必要的,但如果不加注意会时常出现)。要在这两种互相竞争的要求间进行权衡并不容易。所以收益函数设计在某种程度上说是一种艺术。
我们这个简短的介绍只想说明RL实际上是如何实行的。更多细节,我们推荐两个来源:Sutton 和Barto的文本书[3]和最近John Schulman的谈话[4]。
注释和参考资料
[1]游戏规则:(常见的简单游戏:略)
[2] 我有位同事(HC)提出,该程序可能在某个点上开始拟合过度。但这种一维游戏战舰的位点太少,训练集分割似乎不太合适。不过,如果我们转移到更高维度并加入更多战舰时会管用。
[3] Sutton 和 Barto, (2016). 《增强学习引论》文本地址在 .
[4] John Schulman, (2016),《弯区的深度学习学院》 Youtube 的谈话录音在 .
本文译者为:kundogma
原文来自:
用云栖社区APP,舒服~
【云栖快讯】支撑千亿营收,阿里如何做研发?淘宝如何做敏捷实践?如何面对开发中的“黑天鹅”事件?6月29日首届阿里研发效能嘉年华,独家直播,赶紧预约吧!&&
说的很详细,谢谢普及……
阿里云机器学习是基于阿里云分布式计算引擎的一款机器学习算法平台。用户通过拖拉拽的方式可视化的操作组件来进行试验,...
帮助您基于阿里云构建出一个隔离的网络环境。您可以完全掌控自己的虚拟网络,如选择自有 IP 地址范围、划分网段、配...
以阿里云成熟的商业化云服务为基础,为游戏开发者、运营企业提供专属集群、尊享VIP服务、专项扶持基金、及多场景多类...
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本...
2017杭州云栖大会火热抢票
Loading...转自:http://blog.csdn.net/langb2014/article/details/Python1.&Theano是一个Python类库,用数组向量来定义和计算数学表达式。它使得在Python环境下编写深度学习算法变得简单。在它基础之上还搭建了许多类库。&  1.Keras是一个简洁、高度模块化的神经网络库,它的设计参考了Torch,用Python语言编写,支持调用GPU和CPU优化后的Theano运算。  2.Pylearn2是一个集成大量深度学习常见模型和训练算法的库,如随机梯度下降等。它的功能库都是基于Theano之上。  3.Lasagne是一个搭建和训练神经网络的轻量级封装库,基于Theano。它遵循简洁化、透明化、模块化、实用化和专一化的原则。  4.Blocks也是一个基于Theano的帮助搭建神经网络的框架。2.&Caffe是深度学习的框架,它注重于代码的表达形式、运算速度以及模块化程度。它是由伯克利视觉和学习中心(Berkeley&Vision&and&Learning&Center,&BVLC)以及社区成员共同开发。谷歌的DeepDream项目就是基于Caffe框架完成。这个框架是使用BSD许可证的C++库,并提供了Python调用接口。3.&nolearn囊括了大量的现有神经网络函数库的封装和抽象接口、大名鼎鼎的Lasagne以及一些机器学习的常用模块。4.&Genism也是一个用Python编写的深度学习小工具,采用高效的算法来处理大规模文本数据。5.&Chainer在深度学习的理论算法和实际应用之间架起一座桥梁。它的特点是强大、灵活、直观,被认为是深度学习的灵活框架。6.&deepnet是基于GPU的深度学习算法函数库,使用Python语言开发,实现了前馈神经网络(FNN)、受限玻尔兹曼机(RBM)、深度信念网络(DBN)、自编码器(AE)、深度玻尔兹曼机(DBM)和卷积神经网络(CNN)等算法。7.&Hebel也是深度学习和神经网络的一个Python库,它通过pyCUDA控制支持CUDA的GPU加速。它实现了最重要的几类神经网络模型,提供了多种激活函数和模型训练方法,例如momentum、Nesterov&momentum、dropout、和early&stopping等方法。8.&CXXNET是一个基于MShadow开发的快速、简洁的分布式深度学习框架。它是一个轻量级、易扩展的C++/CUDA神经网络工具箱,提供友好的Python/Matlab接口来进行训练和预测。9.&DeepPy是基于NumPy的深度学习框架。10.&DeepLearning是一个用C++和Python共同开发的深度学习函数库。11.&Neon是Nervana&System&的深度学习框架,使用Python开发。&相关链接:从Theano到Lasagne:基于Python的深度学习的框架和库Matlab1.&ConvNet&卷积神经网络是一类深度学习分类算法,它可以从原始数据中自主学习有用的特征,通过调节权重值来实现。2.&DeepLearnToolBox是用于深度学习的Matlab/Octave工具箱,它包含深度信念网络(DBN)、栈式自编码器(stacked&AE)、卷积神经网络(CNN)等算法。3.&cuda-convet是一套卷积神经网络(CNN)代码,也适用于前馈神经网络,使用C++/CUDA进行运算。它能对任意深度的多层神经网络建模。只要是有向无环图的网络结构都可以。训练过程采用反向传播算法(BP算法)。4.&MatConvNet是一个面向计算机视觉应用的卷积神经网络(CNN)Matlab工具箱。它简单高效,能够运行和学习最先进的机器学习算法。CPP1.&eblearn是开源的机器学习C++封装库,由Yann&LeCun主导的纽约大学机器学习实验室开发。它用基于能量的模型实现卷积神经网络,并提供可视化交互界面(GUI)、示例以及示范教程。2.&SINGA是Apache软件基金会支持的一个项目,它的设计目标是在现有系统上提供通用的分布式模型训练算法。3.&NVIDIA&DIGITS是用于开发、训练和可视化深度神经网络的一套新系统。它把深度学习的强大功能用浏览器界面呈现出来,使得数据科学家和研究员可以实时地可视化神经网络行为,快速地设计出最适合数据的深度神经网络。4.&Intel(R)&Deep&Learning&Framework提供了Intel(R)平台加速深度卷积神经网络的一个统一平台。Java1.&N-Dimensional&Arrays&for&Java&(ND4J)&是JVM平台的科学计算函数库。它主要用于产品中,也就是说函数的设计需求是运算速度快、存储空间最省。2.&Deeplearning4j&是第一款商业级别的开源分布式深度学习类库,用Java和Scala编写。它的设计目的是为了在商业环境下使用,而不是作为一款研究工具。3.&Encog是一个机器学习的高级框架,涵盖支持向量机、人工神经网络、遗传编程、贝叶斯网络、隐马可夫模型等,也支持遗传算法。JavaScript1.&Convnet.js&由JavaScript编写,是一个完全在浏览器内完成训练深度学习模型(主要是神经网络)的封装库。不需要其它软件,不需要编译器,不需要安装包,不需要GPU,甚至不费吹灰之力。Lua1.&Torch是一款广泛适用于各种机器学习算法的科学计算框架。它使用容易,用快速的脚本语言LuaJit开发,底层是C/CUDA实现。Torch基于Lua编程语言。Julia1.&Mocha是Julia的深度学习框架,受C++框架Caffe的启发。Mocha中通用随机梯度求解程序和通用模块的高效实现,可以用来训练深度/浅层(卷积)神经网络,可以通过(栈式)自编码器配合非监督式预训练(可选)完成。它的优势特性包括模块化结构、提供上层接口,可能还有速度、兼容性等更多特性。Lisp1.&Lush(Lisp&Universal&Shell)是一种面向对象的编程语言,面向对大规模数值和图形应用感兴趣的广大研究员、实验员和工程师们。它拥有机器学习的函数库,其中包含丰富的深度学习库。Haskell1.&DNNGraph是Haskell用于深度神经网络模型生成的领域特定语言(DSL)。.NET1.&Accord.NET&是完全用C#编写的.NET机器学习框架,包括音频和图像处理的类库。它是产品级的完整框架,用于计算机视觉、计算机音频、信号处理和统计应用领域。R1.&darch包可以用来生成多层神经网络(深度结构)。训练的方法包括了对比散度的预训练和众所周知的训练算法(如反向传播法或共轭梯度法)的细调。2.&deepnet实现了许多深度学习框架和神经网络算法,包括反向传播(BP)、受限玻尔兹曼机(RBM)、深度信念网络(DBP)、深度自编码器(Deep&autoencoder)等等。
最新教程周点击榜
微信扫一扫我最喜欢的9个 Python深度学习库-深度学习世界-微转化
(window.slotbydup=window.slotbydup || []).push({
id: '1110850',
container: s,
size: '234,60',
display: 'inlay-fix'
?深度学习?世界--关注?深度学习?应用,提供?深度学习?资料下载和技术交流.
看一个女人的身材,就知道她的气质和修养
[广告]●●●●●●●●●●●
热门公众号Accounts
精彩内容热门推荐
阅读人心是一门学问,不会阅读的人读的是人的表面现象,而会阅读的人读人的内在本质.做人必须学会阅,女人读心术,教你读懂男人!
传递有价值的信息!
dianbing81
细说天下军情,你不知道的,我告诉你.
参与、沟通、记录时代.
燕郊通(燕郊百事通之意):提供新鲜实用的燕郊资讯,解答你在燕郊生活遇到的问题.
yugewang_11sns
该账号用于健康资讯的传播、交流.渔歌网是致力于公众健康服务的网站,渔歌网愿意与所有热爱健康的人们在微信平台互动.
36氪()是中国领先的科技新媒体,我们报道最新的互联网科技新闻以及最有潜力的互联网创业企业.
安利?微店?业务?速递?的资讯世界!内容覆盖公司最新消息,社会热点话题,及健康、美容、商务、生活类资讯,助力营销伙伴全面把握公司脉搏,悉知社会潮流.
致力于打造?宁乡?本土方言娱乐节目
提供权威新鲜的IT业界新闻,是新媒体、新技术、新商业互动平台
cctvnewscenter
我最喜欢的9个 Python深度学习库
阅读&37964&发表& 16:57:59
如果你对深度学习和卷积神经网络感兴趣,但是并不知道从哪里开始,也不知道使用哪种库,那么这里就为你提供了许多帮助。在这篇文章里,我详细解读了9个我最喜欢的Python深度学习库。这个名单并不详尽,它只是我在计算机视觉的职业生涯中使用并在某个时间段发现特别有用的一个库的列表。这其中的一些库我比别人用的多很多,尤其是Keras、mxnet和sklearn-theano。其他的一些我是间接的使用,比如Theano和TensorFlow(库包括Keras、deepy和Blocks等)。另外的我只是在一些特别的任务中用过(比如nolearn和他们的Deep
Belief Network implementation)。这篇文章的目的是向你介绍这些库。我建议你认真了解这里的每一个库,然后在某个具体工作情境中你就可以确定一个最适用的库。我想再次重申,这份名单并不详尽。此外,由于我是计算机视觉研究人员并长期活跃在这个领域,对卷积神经网络(细胞神经网络)方面的库会关注更多。我把这个深度学习库的列表分为三个部分。第一部分是比较流行的库,你可能已经很熟悉了。对于这些库,我提供了一个通俗的、高层次的概述。然后,针对每个库我详细解说了我的喜欢之处和不喜欢之处,并列举了一些适当的应用案例。第二部分进入到我个人最喜欢的深度学习库,也是我日常工作中使用最多的,包括:Keras、mxnet和sklearn-theano等。最后,我对第一部分中不经常使用的库做了一个“福利”板块,你或许还会从中发现有用的或者是在第二板块中我还没有尝试过但看起来很有趣的库。接下来就让我们继续探索。针对初学者:1.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库我并没有太多的经验。然而在接下来的几个月里,我希望这有所改变。LasagneLasagne是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)。DIGITSDIGITS并不是一个真正的深度学习库(虽然它是用Python写的)。DIGITS(深度学习GPU培训系统)实际上是用于培训Caffe深度学习模式的web应用程序(虽然我认为你可以破解源代码然后使用Caffe以外其他的后端进行工作,但这听起来就像一场噩梦)。如果你曾经用过Caffe,那么你就会知道通过它的终端来定义.prototxt文件、生成图像数据、运行网络并监管你的网络训练是相当繁琐的。
DIGITS旨在通过让你在浏览器中执行这些任务来解决这个问题。此外,DIGITS的用户界面非常出色,它可以为你提供有价值的统计数据和图表作为你的模型训练。另外,你可以通过各种输入轻松地可视化网络中的激活层。最后,如果您想测试一个特定的图像,您可以把图片上传到你的DIGITS服务器或进入图片的URL,然后你的Caffe模型将会自动分类图像并把结果显示在浏览器中。干净利落!福利:Blocks说实话,虽然我一直想尝试,但截至目前我的确从来没用过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。深入研究深度学习和卷积神经网络图1:了解PyImageSearch大师课程内的如何利用深度学习和卷积神经网络对图像内容进行分类对深度学习好奇吗?我会在这里提供帮助。在PyImageSearch大师的课程中,我创建了21节课包括256页的神经网络、深度信念网络和卷积神经网络教程,可以让你轻松快速的学到这些内容。总结在这篇文章中,我回顾了一些我最喜爱的深度学习和卷积神经网络库。但这个列表决不是详尽的,而且专注于计算机视觉和卷积神经网络的深度学习库肯定是有失偏颇的。尽管这样说,但对于一个刚刚进入深度学习领域,并在寻找一个合适的库的人,我认为这确实是一个伟大的列表。我个人认为打败Keras和mxne是很难的事。Keras库位于计算的龙头地位,如Theano和TensorFlow,可以让您只需几行Python代码就可以构建深度学习架构。虽然mxnet可能需要更多一点的代码来构建和培养网络,但它能够轻松高效地将培养任务分配到多个GPU中。如果你在一个多GPU系统或环境中,并希望充分利用这个环境,那就肯定要试一试mxnet。点击“阅读原文”了解更多培训详情↓↓↓
声明:以上内容转载自微信公众号《深度学习世界》,并不代表本站观点及立场,且版权归属微信公众号《深度学习世界》。
微信公众号

我要回帖

 

随机推荐