作者 | Shona
编辑 | 程可欣
专栏 | 九章算法
深度学习需要进行大量的计算,通常会涉及多层神经网络,并且每层神经网络中都含有大量的人工神经元,在学习过程中进行数据的处理和传输。换句话说,在神经网络的每一层,都有数以千计的人工神经元执行相同的计算。因此,神经网络的结构使之可以并行执行计算指令,非常适合进行与图像处理相关的计算。
随着过去几年深度学习和人工智能领域的快速发展,我们引入了许多的深度学习框架,创建这些深度学习框架的主要目的是希望将深度学习更有效地运用到图像处理上。它们依赖于数据流图的概念,按照顺序执行计算。你在这些框架中所拥有的是一种与宿主语言不同的语言,使得数据流图可以并行地在图形处理单元中优化运行。
在这篇文章中,我主要介绍了5个作为深度学习发展的主力框架,它们使得数据科学家和IT工程师们更容易地通过深度学习解决复杂问题,并执行更加复杂的任务。但这5个框架也只是众多开源框架中的沧海一粟,在深度学习领域有非常多的开源框架来帮助人们处理问题。
TensorFlow(Google)
TensorFlow 最初是由 Google Brain Team 的研究人员开发的框架,主要面向深度神经网络和人工智能研究。自2015年底以来,该框架在 GitHub 上正式开源。TensorFlow 能够快速进行基于图形的计算,而灵活的 TensorFlow API 则因其 GPU 支持体系结构可以在多种设备上部署网络模型。
简而言之,TensorFlow 框架有三个主要组成部分:
1. TensorFlow API:使用 C++ 编写,包括用于定义模型和进行数据训练的 API。它有一个用户友好的 Python 界面。
2.TensorBoard:这是一个可视化工具包,可以用来帮助分析,可视化和调试 TensorFlow 产生的图形。
3.TensorFlow Serving:这是一种灵活的高性能服务系统,用于在环境中部署预先训练好的机器学习模型。也可以用 C++ 编写并可通过 Python 界面访问,Serving 可以从旧模式切换到新模式。
TensorFlow早已被广泛应用于学术研究和工业应用。当前用途包括:Deep Speech,RankBrain,SmartReply和计算机视觉。
Keras:高级包装
深度学习框架分别在两个抽象级别上运行:
低级- 实现数学运算和神经网络基元(TensorFlow,Theano,PyTorch等)
高级- 采用低级基元实现神经网络(模型和层)
Keras 是后端库的包装,可以与 TensorFlow 或 Theano 相结合,如果将 Keras 和 TensorFlow 后端结合使用,就可以运行 TensorFlow 的代码。Keras 提供了许多细节信息,非常适合深度学习的初学者使用。
Theano (University of Montreal)
Theano 也是一个用于快速数值计算的 Python 库,可以在 CPU 或 GPU 上运行。它是 Montreal 大学的 Montreal 算法学习小组开发的一个开源项目,它的优秀特性包括: GPU 使用过程透明、与 Numpy 处理包紧密集成、具有高效的符号区分性、速度和稳定性得到优化以及存在单元测试。
遗憾的是,Youshua Bengio(MILA实验室负责人)在2017年11月宣布他们将不再维护或开发 Theano。原因在于 Theano 多年来推出的大部分创新技术现在已被其他框架所采用和完善。不过如果你感兴趣,就可以继续对其进行开发。
PyTorch(Facebook)
PyTorch 是一个相对较新的深度学习框架,正迅速在研究人员中流行起来。该框架由 Facebook 人工智能研究团队开发,用来应对来自Torch的挑战。由于编程语言 Lua 的普及程度不高,Torch 永远无法发展到和 Google 开发的 TensorFlow 一样的地位。因此, PyTorch 采用了 Python 语言进行编程。另外,它还支持动态计算图,对于使用时间序列和自然语言进行数据处理的研究人员具有很大的吸引力。
PyTorch 的3个抽象层次分别是:张量、变量和模块。
Torch (NYU / Facebook)
下面我们来谈谈 Torch 。它是 Facebook 的深度学习开源框架并且它的脚本语言是基于 Lua 编程语言进行编写的。它提供了广泛的深度学习算法,并已被 Facebook,IBM,Yandex 等公司用于解决数据流的硬件问题。
Torch 是 PyTorch 的原型,它们之间分享了许多 C 语言后端。与具有3个抽象级别的 PyTorch 不同,Torch 只有2个抽象级别:张量和模块。
Caffe(UC Berkeley)
Caffe 是一个高速、模块化的深度学习框架。它由 Berkeley 人工智能研究小组和 Berkeley 视觉学习中心开发。虽然其核心是由 C++ 编写的,但是与 Python 和 Matlab 绑定。这对训练和微调前馈分类模型非常有用。虽然在研究中运用不多,但是该框架很受欢迎。
想要使用 Caffeine 训练和微调神经网络,需要经过以下4个步骤:
1
数据转换
我们读取数据文件,然后进行预处理操作,并以 Caffe 可以使用的格式进行存储。我们将编写一个用于数据预处理和存储的 Python 脚本。
2
模型定义
定义神经网络的结构。我们选择一种卷积神经网络结构,并在扩展名为 .prototxt 的文件中定义参数。
3
求解器定义(Define the solver)
求解器负责模型优化。定义所有有关梯度下降的信息。我们正在扩展名为.prototxt的配置文件中定义求解器参数。
4
模型训练
我们通过调用参数来训练模型。训练好后,将其放入扩展名为 .caffemode l的文件中。
总而言之, Caffe 对于训练和微调前馈分类模型非常有用。你可以轻松地训练模型而无需编写任何代码。它的 Python 接口非常有用,因为你可以在不使用 Python 代码的情况下部署模型。它的缺陷是你需要为每个新的 GPU 图层编写核心C++代码(在Caffe下)。因此,对于大型网络(AlexNet,VGG,GoogLeNet,ResNet 等)的处理非常麻烦。
你应该选择哪种深度学习架构?
因为 Theaterno 已不再继续开发,Torch 由大多数人都不熟悉的编程语言 Lua 进行编写,Caffe 更新过快等一系列原因。TensorFlow 和 PyTorch 成为大多数深度学习者的首选框架。虽然这两个框架全部基于 Python 但是他们之间仍存在一些差异:
1. PyTorch 的界面对于初学者来说更加简洁。编程部分更加直观,不需要过多了解库。但是 TensorFlow 中有许多库的内容需要了解。
2. TensorFlow 配备了一个有许多人组成的庞大且活跃的社区。这意味着 TensorFlow 拥有比 PyTorch 更多的在线课程、代码教程、文档和博客内容。
3. PyTorch 作为一个新平台,有许多有趣的功能尚未实现。然而它在短短一年多时间内已经取得了惊人的成绩。
4. TensorFlow 具有可扩展性,并且与分布式执行相兼容。它支持从单个 GPU 到庞大系统,这些系统涉及大量的分布式强化学习,并且能够实时进行实验和发现错误。
最重要的一点是, TensorFlow 可以在图结构中定义状态和迭代,然后运行。而 PyTorch 则是在计算过程中实时定义。换句话说, TensorFlow 使用静态计算图,可以更方便地部署到移动设备,和其他体系结构,并且可以提前进行编译。而 PyTorch 使用动态计算图,为复杂体系结构(如动态神经网络)提供了更简单的调试过程和更强的处理能力。
因此,PyTorch 更适合于深度学习爱好者和小型项目的快速原型设计,尤其是涉及到跨平台和嵌入式部署。TensorFlow 在经历了很长的发展时间后,仍被人们广泛运用,它更加支持大型项目并拥有更好的可扩展性。
最后的结论
上面列出的5个深度学习框架大多是基于 python 的,但是它们只是众多框架中性能较好的一部分。在过去的几年,发布了多个深度学习框架,例如:DeepLearning4j (Java), Apache’s MXNet (R, Python, Julia),Microsoft CNTK (C++, Python),和Intel’s Neon (Python)。每个框架都有自己的特点,因为它们是不同的人为了不同的研究目的而开发的。对这些开源框架进行全面的了解肯定会对你以后遇到的深度学习问题有所助益。当你在选择适合自己进行编程的框架时需要注意以下几点:易于使用(尤其是架构和运算速度符合要求)、 GPU 支持、有训练教程和训练参数、神经网络建模功能和所支持的语言。
领取专属 10元无门槛券
私享最新 技术干货