初识Pytorch -- 前世今生

第一次听说Pytorch这个名词的时候,心理纳闷,这是个什么玩意儿,我这个人有点死脑筋,听到什么名词的时候就想知道它是怎么来的,有什么缘由,就如TensorFlow一样,流动的tensor,很是形象,那pytorch是个啥呢?首先想到的是python的手电筒。。。
好了 ,玩笑不多说,进入正题吧。
要认识PyTorch之前,必须先认识一下手电筒 -- Torch。
Torch是一个基于BSD License的开源的机器学习的框架,早在2002年就发布了Torch的初版。Torch一直聚焦于大规模的机器学习应用,尤其是图像或者视频应用等领域,在超过5万次的下载,在学校和企业中也有着不小的影响力,Torch7希望能够做到像Matlab那样,为机器学习提供环境。Torch是一个有大量机器学习算法支持的科学计算框架,是一个与Numpy类似的张量(Tensor) 操作库,其特点是特别灵活,但因其采用了小众的编程语言是Lua,所以流行度不高,这也就有了PyTorch的出现。所以其实Torch是 PyTorch的前身,它们的底层语言相同,只是使用了不同的上层包装语言,那为什么Torch不适用python呢?

Torch与Lua

Lua在Torch中扮演了一个重要角色,Torch认为LuaJIT是那个“合适的脚本语言”,LuaJIT的优势如下

  • 快速,并且拥有一个透明的JIT编译器
  • 像Python一样简单而且可读
  • 和C语言的接口非常干净和简单
  • 可嵌入到任何环境中,比如iphone的引用,视频游戏或者web后端等

Lua vs Python

为什么不使用Python而使用LuaJIT,Torch给出的理由是:

  • 纠结于速度和效率,而超级轻量级的LuaJIT则不会在这方面碍手碍脚
  • 希望整个Torch框架是自包含的
  • 希望能更容易地将代码移植到任何平台,比如移植到iphone上而不需要修改已经写好的脚本
  • 希望有更容易的扩展性,LuaJIT的FFI接口是最容易学习的方式之一。
    整体来说,这些点LuaJIT都更好地适应Torch,所以选择了LuaJIT。
    奈何Python发展更好,确实可惜......
image

PyTorch是一个基于Torch的Python开源机器学习库,用于自然语言处理等应用程序。它主要由Facebookd的人工智能小组开发,不仅能够 实现强大的GPU加速,同时还支持动态神经网络,这一点是现在很多主流框架如TensorFlow都不支持的。 PyTorch提供了两个高级功能:

  • 具有强大的GPU加速的张量计算(如Numpy)
  • 包含自动求导系统的深度神经网络

除了Facebook之外,Twitter、GMU和Salesforce等机构都采用了PyTorch。

TensorFlow和Caffe都是命令式的编程语言,而且是静态的,首先必须构建一个神经网络,然后一次又一次使用相同的结构,如果想要改 变网络的结构,就必须从头开始。但是对于PyTorch,通过反向求导技术,可以让你零延迟地任意改变神经网络的行为,而且其实现速度 快。正是这一灵活性是PyTorch对比TensorFlow的最大优势。

另外,PyTorch的代码对比TensorFlow而言,更加简洁直观,底层代码也更容易看懂,这对于使用它的人来说理解底层肯定是一件令人激 动的事。

所以,总结一下PyTorch的优点:

  • 支持GPU
  • 灵活,支持动态神经网络
  • 底层代码易于理解
  • 命令式体验
  • 自定义扩展

当然,现今任何一个深度学习框架都有其缺点,PyTorch也不例外,对比TensorFlow,其全面性处于劣势,目前PyTorch还不支持快速傅里叶、沿维翻转张量和检查无穷与非数值张量;针对移动端、嵌入式部署以及高性能服务器端的部署其性能表现有待提升;其次因为这个框架较新,使得他的社区没有那么强大,在文档方面其C库大多数没有文档。

参考链接:
http://pytorch123.com/FirstSection/PyTorchIntro/
https://blog.csdn.net/liumiaocn/article/details/80342750

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容