PyTorch | 01 简介

Posted by JoselynZhao on August 9, 2019

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

【内容省略】