深度学习系列
深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能(AI, Artificial Intelligence)。
本人为深度学习初学者,此系列博文旨在记录学习途中所及笔记及心得。
前言
何为API,在接触深度学习框架之前作,为一个程序猿需要理解这个概念。然后本文主要对比了当前学生中使用比较多的两个深度学习框架:TensorFlow与PyTorch
一、API是什么?
对于API,百度百科给出的解释是:
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。——百度百科
API一般分为操作系统API和编程语言API。
操作系统API,即通过一系列函数帮助用户与硬件之间构成上下级的指令关系。比如我们使用fopen()函数打开一个文件,会很简单,但是底层的操作却很复杂,要首先打开文件首先要扫描硬盘,找到文件的位置,然后从文件中读取一部分数据,将数据放进I/O缓冲区,放进内存;这些数据都是0、1序列,还要对照ASCII表或Unicode表”翻译“成字符,再在显示器上显示出来。操作系统已经为我们实现了很多功能,它们都被封装成了一个一个的函数,有成百上千个之多,这些函数就叫做 API。程序员要想使用某个功能,只需要调用相应的函数。
编程语言API,各种编程语言自带的标准库其实也是API。这些API由编程语言的开发者们编写,安全、高效、健壮,为我们实现了常见的功能,让我们不用再重复造轮子。
二、TensorFlow
TensorFlow实际上也是一个API。TensorFlow 是goole的开发者创造的一款开源的深度学习框架,于 2015 年发布。官方研究发布于论文《TensorFlow:异构分布式系统上的大规模机器学习》。
TensorFlow 框架由两个核心构建模块组成:
一个用于定义计算图以及在各种不同硬件上执行这些图的运行时间的软件库。
一个具有许多优点的计算图(后面很快就会介绍这些优点)。
TensorFlow 拆开来看就是tensor(张量)和flow(流,计算图)。
tensor
上图显示了一些简化的张量。随着维度的不断增加,数据表示将变得越来越复杂。例如,一个3x3的张量,我可以简单地称它为3行和列的矩阵。如果我选择另一个形式的张量(1000x3x3),我可以称之为一个向量或一组1000个3x3的矩阵。在这里我们将(1000x3x3)称为张量的形状或尺寸。张量可以是常数也可以是变量。
flow
流(flow)是指一个计算图或简单的一个图,图不能形成环路,图中的每个节点代表一个操作,如加法、减法等。每个操作都会导致新的张量形成,如上图所示。
计算图具有以下属性:
- 叶子顶点或起始顶点始终是张量。意即,操作永远不会发生在图的开头,由此我们可以推断图中的每个操作都应该接受一个张量并产生一个新的张量。同样,张量不能作为非叶子节点出现,这意味着它们应始终作为输入提供给操作/节点。
- 计算图总是以层次顺序表达复杂的操作。通过将a + b表示为c,将b + 1表示为d,可以分层次组织上述表达式。
- 同级节点的操作彼此独立,这是计算图的重要属性之一。当我们按照图中所示的方式构造一个图时,很自然的是,在同一级中的节点,例如c和d,彼此独立,这意味着没有必要在计算d之前计算c。 因此它们可以并行执行
三、PyTorch
PyTorch 是最新的深度学习框架之一,由 Facebook 的团队开发,并于 2017 年在 GitHub 上开源。有关其开发的更多信息请参阅论文《PyTorch 中的自动微分》。
四、TensorFlow和PyTorch的主要差异
1、TensorFlow优点
- 内置简单高级的API
- 使用 TensorBoard 可视化训练
- 通过 TensorFlow serving 容易实现生产部署
- 很容易的移动平台支持
- 开源
- 良好的文档和社区支持
2、TensorFlow缺点 - 静态图
- 调试方法
- 难以快速修改
3、PyTorch优点 - 类 Python 的代码
- 动态图
- 轻松快速的编辑
- 良好的文档和社区支持
- 开源
- 很多项目都使用 PyTorch
4、PyTorch缺点 - 可视化需要第三方
- 生产部署需要 API 服务器
5、结论
PyTorch更适合于在研究中快速进行原型设计、业余爱好者和小型项目,TensorFlow则更适合大规模的调度,尤其当考虑到跨平台和嵌入式调度操作时。如果你想更快速地开发和构建 AI 相关产品,TensorFlow 是很好的选择。建议研究型开发者使用 PyTorch,因为它支持快速和动态的训练。