PyTorch | 01 简介
- 1 PyTorch 的诞生
- 2常见的深度学习框架介绍
- Theano
- TensorFlow
- Keras
- 3属于动态图的未来
- 4 为什么选择PyTorch
- 5 星火燎原
- 6 fast.ai 放弃Keras+Tensorflow选择PyTorch
1 PyTorch 的诞生
Facebook人工智能研究院(FAIR)开源了PyTorch
使用Lua作为借口
python在计算机科学领域的领先地位,以及生态完整性和接口易用性,几何任何框架都不可避免要提供python的接口。
PyTorch 不是简单地封装Lua Torch提供Python接口,而是对Tensor之上的所有模块进行了冲重构,并新增了最先进的自动求导系统,成为当下最流行的动态图框架。、
2常见的深度学习框架介绍
这些深度学习框架被应用于计算机视觉、语音识别、自然语言处理和生物信息领域,并获得了极好的效果。
Theano
诞生于蒙特利尔大学的LISA实验室,是第一个有较大影响力的Python深度学习框架。
Theano 是一个Python 库,可用于定义、优化和计算数学表达式,特别是多维数组(numpy.ndarray).
Theano编程可实现比手写C语言更快的速度,而通过GPU加速,可以比C语言快上好几个数量级。
Theano在工程设计上有较大的缺陷:
- 难调试
- 构建图慢
因此,在Theano的基础上,开发了Lasagne、Blocks、Pylearn2 和 Keras等第三方框架。
Theano 之后的深度学习框架的开发奠定了基本设计方向:以计算图为框架的核心,采用GPU加速计算。
TensorFlow
2015年 11 月10 日, Google 推出全新的机器学习开源工具 TensorFlow。
TensorFlow主要用于进行机器学习和深度神经网络研究,非常基础,可以应用于众多领域。
TensorFlow在很大程度上可以看作是Theano的后继者,和Theano具有相近的设计理念,都是基于计算图实现自动微分系统。
TensorFlow使用数据流图进行数值计算,图中的节点代表数学运算,而图中的边则代表这些节点之间传递的多维数组(张量)。
TensorFlow编程接口支持Python 和C++。
用户可以在各种服务器和移动设备上部署自己的训练模型,无须执行单独的模型解码器或者加载Python解释器。
对TensorFlow的批评:
- 过于复杂的系统设计。难以维护,底层机制难以学习
- 频繁变动的接口。 接口处于快速迭代之中,没有很好地考虑向后兼容性。
- 接口设计过于晦涩难懂。 图、会话、命名空间、place-holder 等概念抽象。
- 文档混乱脱节。
总结:TensorFlow 不完美但流行的深度学习框架,社区强大,适合生产环境。
Keras
Keras是一个高层神经网络API,有纯Python编写而成 并使用TensorFlow、Theano以及CNTK作为后端。
支持快速实验,把想法迅速转换为结果,容易上手,减少用户工作量,避免用户重复造轮子。
Keras更像一个深度学习接口,构建于第三方框架之上。
缺点:
- 过度封装 丧失灵活性。
- Keras的程序过于缓慢。
- 很难学到深度学习真正的内容
总结: 入门最简单,但不够灵活,使用受限。
3属于动态图的未来
几乎所有的框架都是基于计算图的。
而计算图又可以分为静态计算图 和动态计算图。
静态计算图 先定义再运行(define and run),一次定义多次运行。
动态计算图 在运行过程中被定义,在运行的时候构建,可以多次构建多次运行。
PyTorch 使用的是动态图,而TensorFlow使用的是静态图。
在PyTorch中每一次前向传播(每一次运行代码)都会创建一幅新的计算图,如下所示。
静态图一旦创建就不能修改,而且静态图定义的时候,使用了特殊的语法,就像新学一门语言。
静态图过于庞大,占用过高的显存。
if条件语句在TensorFlow和PyTorch中的两种实现方式:
- PyTorch动态图实现
- TensorFlow静态图实现
PyTorch的实现方式和Python语法一样,简洁直观。
动态图优势: 报错的地方,就是写错代码的地方。
4 为什么选择PyTorch
PyTorch 简洁优雅且高效快速,兼具良好的灵活性、易用性,速度。
原因归结如下:
- 简洁。 追求最少的封装,易于理解
- 速度。
- 易用。 面向对象设计。
- 活跃的社区。 完整的文档,循序渐进的指南。
使用TensorFlow能找到很多别人的代码,使用PyTorch能很轻松实现自己的想法。
5 星火燎原
【内容省略】
6 fast.ai 放弃Keras+Tensorflow选择PyTorch
【内容省略】