PyTorch 是什么,PyTorch是Torch7团队开发的,不仅能够实现强大的GPU加速,同时还支持动态神经网络。PyTorch的前身便是Torch
,其底层和Torch框架一样,但是使用python重新写了很多内容,不仅更加灵活,支持动态图,也提供了Python接口。
PyTorch 是什么
极客教程PyTorch教程有简单介绍,Pytorch是一个基于Python的科学计算软件包,它使用图形处理单元的强大功能。它也是为提供最大灵活性和速度而构建的首选深度学习研究平台之一。众所周知,它提供了两个最高级的功能:具有强大的GPU加速支持的张量计算和在基于磁带的自动编程系统上构建深度神经网络。
PyTorch的前身便是Torch
,Torch是一个大量机器学习算法支持的科学计算框架,其诞生已经有十年之久,但是真正起势得益于Facebook开源了大量Torch的深度学习模块和扩展。Torch的特点在于特别灵活,但是另外一个特殊之处是采用了编程语言Lua,在目前深度学习大部分以python为编程语言的大环境下,一个以lua为编程语言的框架有着先天的劣势,这种小众语言增加了学习使用Torch框架的成本。
PyTorch 发展历史
2017 年 1 月,Facebook AI 研究团队发布 PyTorch,一个基于 Torch 的 Python 工具包,专门用于 GPU 加速的深度学习编程。
2017 年 8 月,PyTorch V 0.2.0 发布,引入广播、高级索引、高阶梯度、新图层,以及分布式训练等,前两者进一步方便了 Tensor 与 Numpy 互转。
2018 年 4 月,Caffe2 代码合并到 PyTorch。Facebook 打算将 PyTorch 的研究特性与 Caffe2 的生产特性更好地结合起来。
2018 年 4 月,PyTorch V 0.4.0 发布,新特性包括 Tensor 和 Variable 合并,强化 Numpy 风格的 Tensor 构建等,并正式支持 Windows 系统。
2018 年 10 月,PyTorch V 1.0.0 发布,融合 PyTorch 自身灵活性、研究优势与 Caffe2 的后端与应用能力、ONNX 的框架转换能力于一体;同时 FastAI V1.0 发布,可用单一 API 玩转常见深度学习应用,大大降低了深度学习的学习门槛。
2019 年 5 月,PyTorch V 1.1 发布,提供了新的 API,原生支持 TensorBoard 和自定义循环神经网络,并提升了性能。
PyTorch 的优点
简洁:
PyTorch的设计追求最少的封装,尽量避免重复造轮子。不像 TensorFlow 中充斥着session、graph、operation、name_scope、variable、tensor、layer等全新的概念,PyTorch 的设计遵循tensor → variable(autograd) → nn.Module 三个由低到高的抽象层次,分别代表高维数组(张量)、自动求导(变量)和神经网络(层/模块),而且这三个抽象之间联系紧密,可以同时进行修改和操作。 简洁的设计带来的另外一个好处就是代码易于理解。PyTorch的源码只有TensorFlow的十分之一左右,更少的抽象、更直观的设计使得PyTorch的源码十分易于阅读。
速度:
PyTorch 的灵活性不以速度为代价,在许多评测中,PyTorch 的速度表现胜过 TensorFlow和Keras 等框架。框架的运行速度和程序员的编码水平有极大关系,但同样的算法,使用PyTorch实现的那个更有可能快过用其他框架实现的。
易用:
PyTorch 是所有的框架中面向对象设计的最优雅的一个。PyTorch的面向对象的接口设计来源于Torch,而Torch的接口设计以灵活易用而著称,Keras作者最初就是受Torch的启发才开发了Keras。PyTorch继承了Torch的衣钵,尤其是API的设计和模块的接口都与Torch高度一致。PyTorch的设计最符合人们的思维,它让用户尽可能地专注于实现自己的想法,即所思即所得,不需要考虑太多关于框架本身的束缚。
动态计算图
Pytorch还提供了一个出色的平台,可提供动态计算图,因此您可以在运行时更改它们。当您不知道创建神经网络模型需要多少内存时,这非常有用。它避免了在TensorFlow等框架中使用的静态图,从而允许开发人员和研究人员改变网络在运行中的行为方式。早期采用者更喜欢pytorch,因为与TensorFlow相比,它更直观。
不同的后端支持:
Pytorch使用不同的后端来实现CPU,GPU和各种功能,而不是使用单个后端。它使用张量后端TH用于CPU,THC用于GPU。而神经网络后端分别为THNN和THCUNN用于CPU和GPU。在单独后端受到约束的系统上部署pytorch变得非常容易。
高度可扩展:
pytorch与C++代码深度集成 ,它与深度学习框架Torch 共享一些 C++后端。因此,允许用户使用基于cFFI for Python的扩展API在C/C++中编程,并为CPU操作编译CPU。此功能扩展了pytorch用于新用例和实验用例,从而使其成为研究用途的首选。
pytorch 社区
pytorch社区每天都在增加数量。在短短的时间里,它已经展示了一些大量的发展,这些发展导致其在许多研究论文和小组中被引用。越来越多的人将pytorch带入其人工智能研究实验室,以提供质量驱动的深度学习模型。
有趣的事实是,pytorch仍然处于早期发布测试阶段,但每个人都以快节奏的速度采用这种深度学习框架的方式显示了其在社区中的真正潜力和力量。即使它处于测试版中,官方GitHub存储库中仍有741个贡献者致力于增强和改进现有的pytorch功能。
由于其灵活性和模块化设计,pytorch不限于特定应用。Facebook,Twitter,NVIDIA,Uber等领先科技巨头在NLP,机器翻译,图像识别,神经网络和其他关键领域等多个研究领域中大量使用它。
PyTorch 高级特征
PyTorch(Caffe2) 通过混合前端,分布式训练以及工具和库生态系统实现快速,灵活的实验和高效生产。PyTorch 和 TensorFlow 具有不同计算图实现形式,TensorFlow 采用静态图机制(预定义后再使用),PyTorch采用动态图机制(运行时动态定义)。PyTorch 具有以下高级特征:
- 混合前端:新的混合前端在急切模式下提供易用性和灵活性,同时无缝转换到图形模式,以便在C++运行时环境中实现速度,优化和功能。
- 分布式训练:通过利用本地支持集合操作的异步执行和可从Python 和 C++访问的对等通信,优化了性能。
- Python优先:PyTorch为了深入集成到Python中而构建的,因此它可以与流行的库Cython和Numba等软件包一起使用。
- 丰富的工具库:活跃的研究人员和开发人员社区建立了丰富的工具和库生态系统,用于扩展PyTorch并支持从计算机视觉到强化学习等领域的开发。
- 本机ONNX支持:以标准ONNX(开放式神经网络交换)格式导出模型,以便直接访问与ONNX兼容的平台,运行时可视化工具等。
- C++前端:C++前端是PyTorch的纯C++接口,它遵循已建立的Python前端的设计和体系结构。它旨在实现高性能,低延迟和裸机C++应用程序的研究。使用GPU和CPU优化的深度学习张量库。