深度学习框架是一种为了深度学习开发而生的工具,库和预训练模型等资源的总和。有了这种框架,看似复杂神秘的深度学习模型开发被大大简化,成为AI开发者的必用利器。
目前,TensorFlow和PyTorch明显领先,其他框架势微。如下图所示,基于TensorFlow和PyTorch的开源项目,明显领先其它框架。
注:Keras不算完整的AI框架,另外KerasAPI已经成为TF2.0的高层API。TensorFlow 是市场需求最多,也是增长最快的框架,它的领先地位不会在短期内被颠覆。
PyTorch 也在迅速发展,尤其在学术界,越来越多的论文代码基于PyTorch。它在工作列表中的大量增加证明了其使用和需求的增加。
TensorFlow和PyTorch两种框架未来相当时间内会趋同共存。现在PyTorch的在学术界广泛采用;而TensorFlow依赖强大的部署能力,是应用首选。
未来TensorFlow2.0大大提高易用性(集成Keras,支持动态库EagerExecution等); PyTorch也在利用ONNX提高部署能力。
TensorFlow和PyTorch会越来越趋同。TensorFlow和PyTorch已是未来几年最主流的深度学习框架。
围绕这两种框架的软,硬件,和开发者生态将会迅猛发展,新框架越来越难以成长,其他框架差距越来越大。
谷歌人工智能写作项目:神经网络伪原创
Python 深度学习生态系统在这几年中的演变实属惊艳好文案。pylearn2,已经不再被积极地开发或者维护,大量的深度学习库开始接替它的位置。这些库每一个都各有千秋。
我们已经在 indico 的产品或者开发中使用了以下列表中的大部分的技术,但是对于剩下一些我们没有使用的,我将会借鉴他人的经验来帮助给出 Python 深度学习生态系统的清晰的、详尽的理解。
确切地说,我们将会关注:TheanoLasagneBlocksTensorFlowKerasMXNetPyTorch下面是对这 7 大 Python 深度学习框架的描述以及优缺点的介绍。
Theano描述:Theano 是一个 Python 库,允许你定义、优化并且有效地评估涉及到多维数组的数学表达式。它与 GPUs 一起工作并且在符号微分方面表现优秀。
概述:Theano 是数值计算的主力,它支持了许多我们列表当中的其他的深度学习框架。
Theano 由 Frédéric Bastien 创建,这是蒙特利尔大学机器学习研究所(MILA)背后的一个非常优秀的研究团队。
它的 API 水平较低,并且为了写出效率高的 Theano,你需要对隐藏在其他框架幕后的算法相当的熟悉。
如果你有着丰富的学术机器学习知识,正在寻找你的模型的精细的控制方法,或者想要实现一个新奇的或者不同寻常的模型,Theano 是你的首选库。总而言之,为了灵活性,Theano 牺牲了易用性。
优点:灵活正确使用时的高性能缺点:较高的学习难度低水平的 API编译复杂的符号图可能很慢Lasagne描述:在 Theano 上建立和训练神经网络的轻量级库概述:因为 Theano 致力于成为符号数学中最先且最好的库,Lasagne 提供了在 Theano 顶部的抽象,这使得它更适合于深度学习。
它主要由当前 DeepMind 研究科学家 Sander Dieleman 编写并维护。
Lasagne 并非是根据符号变量之间的函数关系来指定网络模型,而是允许用户在层级思考,为用户提供了例如「Conv2DLayer」和「DropoutLayer」的构建块。
Lasagne 在牺牲了很少的灵活性的同时,提供了丰富的公共组件来帮助图层定义、图层初始化、模型正则化、模型监控和模型训练。
优点:仍旧非常灵活比 Theano 更高级的抽象文档和代码中包含了各种 Pasta Puns缺点:社区小Blocks描述:用于构建和训练神经网络的 Theano 框架概述:与 Lasagne 类似,Blocks 是在 Theano 顶部添加一个抽象层使深度学习模型比编写原始的 Theano 更清晰、更简单、定义更加标准化。
它是由蒙特利尔大学机器学习研究所(MILA)编写,其中一些人为搭建 Theano 和第一个神经网络定义的高级接口(已经淘汰的 PyLearn2)贡献了自己的一份力量。
比起 Lasagne,Blocks 灵活一点,代价是入门台阶较高,想要高效的使用它有不小的难度。
除此之外,Blocks 对递归神经网络架构(recurrent neural network architectures)有很好的支持,所以如果你有兴趣探索这种类型的模型,它值得一看。
除了 TensorFlow,对于许多我们已经部署在 indico 产品中的 API,Blocks 是其首选库。
优点:仍旧非常灵活比 Theano 更高级的抽象易于测试缺点:较高的学习难度更小的社区TensorFlow描述:用于数值计算的使用数据流图的开源软件库概述:TensorFlow 是较低级别的符号库(比如 Theano)和较高级别的网络规范库(比如 Blocks 和 Lasagne)的混合。
即使它是 Python 深度学习库集合的最新成员,在 Google Brain 团队支持下,它可能已经是最大的活跃社区了。
它支持在多 GPUs 上运行深度学习模型,为高效的数据流水线提供使用程序,并具有用于模型的检查,可视化和序列化的内置模块。
最近,TensorFlow 团队决定支持 Keras(我们列表中下一个深度学习库)。
虽然 TensorFlow 有着自己的缺点,但是社区似乎同意这一决定,社区的庞大规模和项目背后巨大的动力意味着学习 TensorFlow 是一次安全的赌注。
因此,TensorFlow 是我们今天在 indico 选择的深度学习库。
优点:由软件巨头 Google 支持非常大的社区低级和高级接口网络训练比基于 Theano 配置更快的模型编译完全地多 GPU 支持缺点:虽然 Tensorflow 正在追赶,但是最初在许多基准上比基于 Theano 的慢。
RNN 支持仍不如 TheanoKeras描述:Python 的深度学习库。支持 Convnets、递归神经网络等。在 Theano 或者 TensorFlow 上运行。
概述:Keras 也许是水平最高,对用户最友好的库了。由 Francis Chollet(Google Brain 团队中的另一个成员)编写和维护。
它允许用户选择其所构建的模型是在 Theano 上或是在 TensorFlow 上的符号图上执行。
Keras 的用户界面受启发于 Torch,所以如果你以前有过使用 Lua 语言的机器学习经验,Keras 绝对值得一看。由于部分非常优秀的文档和其相对易用性,Keras 的社区非常大并且非常活跃。
最近,TensorFlow 团队宣布计划与 Keras 一起支持内置,所以很快 Keras 将是 TensorFlow 项目的一个分组。
优点:可供选择的 Theano 或者 TensorFlow 后端直观、高级别的端口更易学习缺点:不太灵活,比其他选择更规范MXNet描述:MXNet 是一个旨在提高效率和灵活性的深度学习框架。
概述:MXNet 是亚马逊(Amazon)选择的深度学习库,并且也许是最优秀的库。
它拥有类似于 Theano 和 TensorFlow 的数据流图,为多 GPU 配置提供了良好的配置,有着类似于 Lasagne 和 Blocks 更高级别的模型构建块,并且可以在你可以想象的任何硬件上运行(包括手机)。
对 Python 的支持只是其冰山一角—MXNet 同样提供了对 R、Julia、C++、Scala、Matlab,和 Javascript 的接口。
如果你正在寻找最佳的性能,选择 MXNet 吧,但是你必须愿意处理与之相对的一些 MXNet 的怪癖。
优点:速度的标杆非常灵活缺点:最小的社区比 Theano 更困难的学习难度PyTorch描述:Python 中的张量(Tensors)和动态神经网络,有着强大的 GPU 加速。
概述:刚刚放出一段时间,PyTorch 就已经是我们 Python 深度学习框架列表中的一个新的成员了。
它是从 Lua 的 Torch 库到 Python 的松散端口,由于它由 Facebook 的 人工智能研究团队(Artificial Intelligence Research team (FAIR))支持且因为它用于处理动态计算图(Theano,TensorFlow 或者其他衍生品没有的特性,编译者注:现在 TensorFlow 好像支持动态计算图),它变得非常的有名。
PyTorch 在 Python 深度学习生态系统将扮演怎样的角色还不得而知,但所有的迹象都表明,PyTorch 是我们列表中其他框架的一个非常棒的选择。
优点:来自 Facebook 组织的支持完全地对动态图的支持高级和低级 API 的混合缺点:比其他选择,PyTorch 还不太成熟。
Coursera的Ng机器学习,UFLDL都看过。没记错的话Ng的机器学习里是直接给出公式了,虽然你可能知道如何求解,但是即使不知道完成作业也不是问题,只要照着公式写就行。
反正我当时看的时候心里并没能比较清楚的明白。我觉得想了解深度学习UFLDL教程 - Ufldl是不错的。有习题,做完的话确实会对深度学习有更加深刻的理解,但是总还不是很清晰。
后来看了Li FeiFei的Stanford University CS231n: Convolutional Neural Networks for Visual Recognition,我的感觉是对CNN的理解有了很大的提升。
沉下心来推推公式,多思考,明白了反向传播本质上是链式法则(虽然之前也知道,但是当时还是理解的迷迷糊糊的)。所有的梯度其实都是对最终的loss进行求导得到的,也就是标量对矩阵or向量的求导。
当然同时也学到了许多其他的关于cnn的。并且建议你不仅要完成练习,最好能自己也写一个cnn,这个过程可能会让你学习到许多更加细节和可能忽略的东西。
这样的网络可以使用中间层构建出多层的抽象,正如我们在布尔线路中做的那样。
例如,如果我们在进行视觉模式识别,那么在第一层的神经元可能学会识别边,在第二层的神经元可以在边的基础上学会识别出更加复杂的形状,例如三角形或者矩形。第三层将能够识别更加复杂的形状。依此类推。
这些多层的抽象看起来能够赋予深度网络一种学习解决复杂模式识别问题的能力。然后,正如线路的示例中看到的那样,存在着理论上的研究结果告诉我们深度网络在本质上比浅层网络更加强大。
深度学习目前的应用领域很多,主要是计算机视觉和自然语言处理,以及各种预测等。
对于计算机视觉,可以做图像分类、目标检测、视频中的目标检测等,对于自然语言处理,可以做语音识别、语音合成、对话系统、机器翻译、文章摘要、情感分析等。
对于刚入行深度学习,想从事人工智能工业应用和研发的小白来说,选择一个适合自己的深度学习框架显得尤为重要。
那么在选择深度学习框架的时候,要注意哪些内容呢?通常我们在选择框架时要考虑易用性、性能、社区、平台支持等问题。
初学者应该考虑容易上手的框架,偏工业应用的开发者可以考虑使用稳定性高、性能好的框架,偏研究性的开发者,一般选择易用而且有领先的模型基线的框架。
目前这个阶段,TensorFlow因为背靠谷歌公司这座靠山,再加上拥有庞大的开发者群体,而且采用了称为“可执行的伪代码”的Python语言,成为最受欢迎的主流框架之一。
一些外围的第三方库(如Keras、TFLearn)也基于它实现了很多成果,Keras还得到TensorFlow官方的支持。
TensorFlow支持的上层语言也在逐渐扩大,对于不同工程背景的人转入的门槛正在降低。
因此,对于刚入行深度学习的小白,TensorFlow是一个非常好的选择,掌握TensorFlow对以后的求职发展很有帮助。
为了让大家更快地掌握深度学习技术,成为人工智能领域高端人才,中公教育联合中科院自动化研究所专家,强力推出人工智能《深度学习》,让大家学有所成、真正掌握机器学习模型以及算法背后的原理。
深度学习,需要怎么做到?
最佳答案1、深度学习,首先要学会给自己定定目标(大、小、长、短),这样学习会有一个方向;然后要学会梳理自身学习情况,以课本为基础,结合自己做的笔记、试卷、掌握的薄弱环节、存在的问题等,合理的分配时间,有针对性、具体的去一点一点的去攻克、落实。
2、可以学习掌握速读记忆的能力,提高学习复习效率。速读记忆是一种高效的学习、复习方法,其训练原理就在于激活“脑、眼”潜能,培养形成眼脑直映式的阅读、学习方式。
速读记忆的练习见《精英特全脑速读记忆训练》,用软件练习,每天一个多小时,一个月的时间,可以把阅读速度提高5、6倍,记忆力、注意力、思维、理解力等也会得到相应的提高,最终提高学习、复习效率,取得好成绩。
如果你的阅读、学习效率低的话,可以好好的去练习一下。3、要学会整合知识点。把需要学习的信息、掌握的知识分类,做成思维导图或知识点卡片,会让你的大脑、思维条理清醒,方便记忆、温习、掌握。
同时,要学会把新知识和已学知识联系起来,不断糅合、完善你的知识体系。这样能够促进理解,加深记忆。4、做题的时候要学会反思、归类、整理出对应的解题思路。
遇到错的题(粗心做错也好、不会做也罢),最好能把这些错题收集起来,每个科目都建立一个独立的错题集(错题集要归类),当我们进行考前复习的时候,它们是重点复习对象,保证不再同样的问题上再出错、再丢分。
其实对于初学者来说,不建议刚开始就学算法,因为脱离业务和数据的算法讨论是毫无意义的,刚开始应该先打好编程和数学基础。
深度学习看似难度大,按照正确的学习路径学习,可以大大降低学习门槛,同时激发学习的乐趣。
简单的说,学习路线大概如下:先学编程、数学和深度学习知识,然后动手实践撸代码,有机会的话多参加数据科学比赛,多做项目练习实操能力。众所周知,深度学习是一个将理论算法与计算机工程技术紧密结合的领域。
对于零基础小白,想往深度学习发展,要掌握哪些数学知识呢?首先是线性代数。在神经网络中大量的计算都是矩阵乘法,这就需要用到线性代数的知识了。
计算向量的余弦相似度也要用到内积运算,矩阵的各种分解办法也出现在主成分分析和奇异值分解中。其次是概率论与统计学。
广义的说,机器学习的核心是统计推断,机器学习的巨头不少都是统计学大师,如迈克尔乔丹,杨乐坤,辛顿等,另外机器学习中大量用到贝叶斯公式,隐马尔科夫模型等等。再次就是微积分。
这是机器学习中的核心知识之一,无论是梯度下降法中的求梯度还是反向传播中的误差传递的推导都需要用到微积分。
我们知道,深度学习是一个将理论算法与计算机工程技术紧密结合的领域,需要扎实的理论基础来帮助你分析数据,同时需要工程能力去开发模型和部署服务。
所以只有编程技能、机器学习知识、数学三个方面共同发展,才能取得更好的成果。
按我们的学习经验,从一个数据源开始——即使是用最传统、已经应用多年的机器学习算法,先完整地走完机器学习的整个工作流程,不断尝试各种算法深挖这些数据的价值,在运用过程中把数据、特征和算法搞透,真正积累出项目经验,才能更快、更靠谱的掌握深度学习技术。