第一次听说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发展更好,确实可惜......
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