pytorch简介
一.Pytorch是什么?
Pytorch是torch的python版本,是由Facebook开源的神经网络框架,专门针对GPU加速的深度神经网络(DNN)编程。Torch是一个经典的对多维矩阵数据进行操作的张量(tensor)库,在机器学习和其他数学密集型应用有广泛应用。与Tensorflow的静态计算图不同,pytorch的计算图是动态的,可以根据计算需要实时改变计算图。但由于Torch语言采用Lua,导致在国内一直很小众,并逐渐被支持Python的Tensorflow抢走用户。作为经典机器学习库Torch的端口,PyTorch为Python语言使用者提供了舒适的写代码选择。
二.为什么选择Pytorch?
1.简洁:
PyTorch的设计追求最少的封装,尽量避免重复造轮子。不像TensorFlow中充斥着session、graph、operation、name_scope、variable、tensor、layer等全新的概念,PyTorch的设计遵循tensor→variable(autograd)→nn.Module三个由低到高的抽象层次,分别代表高维数组(张量)、自动求导(变量)和神经网络(层/模块),而且这三个抽象之间联系紧密,可以同时进行修改和操作。简洁的设计带来的另外一个好处就是代码易于理解。PyTorch的源码只有TensorFlow的十分之一左右,更少的抽象、更直观的设计使得PyTorch的源码十分易于阅读。
2.速度:
PyTorch的灵活性不以速度为代价,在许多评测中,PyTorch的速度表现胜过TensorFlow和Keras等框架。框架的运行速度和程序员的编码水平有极大关系,但同样的算法,使用PyTorch实现的那个更有可能快过用其他框架实现的。
3.易用:
PyTorch是所有的框架中面向对象设计的最优雅的一个。PyTorch的面向对象的接口设计来源于Torch,而Torch的接口设计以灵活易用而著称,Keras作者最初就是受Torch的启发才开发了Keras。PyTorch继承了Torch的衣钵,尤其是API的设计和模块的接口都与Torch高度一致。PyTorch的设计最符合人们的思维,它让用户尽可能地专注于实现自己的想法,即所思即所得,不需要考虑太多关于框架本身的束缚。
4.活跃的社区:
PyTorch提供了完整的文档,循序渐进的指南,作者亲自维护的论坛供用户交流和求教问题。Facebook人工智能研究院对PyTorch提供了强力支持,作为当今排名前三的深度学习研究机构,FAIR的支持足以确保PyTorch获得持续的开发更新,不至于像许多由个人开发的框架那样昙花一现。
三.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优化的深度学习张量库。
四.Pytorch与tensorflow之间的差异在哪里?
上面也将了PyTorch最大优势是建立的神经网络是动态的,对比静态的Tensorflow,它能更有效地处理一些问题,比如说RNN变化时间长度的输出。各有各的优势和劣势。两者都是大公司发布的,Tensorflow(Google)宣称在分布式训练上下了很大的功夫,那就默认Tensorflow在分布式训练上要超出Pytorch(Facebook),还有tensorboard可视化工具,但是Tensorflow的静态计算图使得在RNN上有一点点被动(虽然它用其他途径解决了),不过用PyTorch的时候,会对这种动态的RNN有更好的理解。而且Tensorflow的高度工业化,它的底层代码很难看懂,Pytorch好那么一点点,如果深入PytorchAPI,至少能比看Tensorflow多看懂一点点Pytorch的底层在干啥。
五.Pytorch有哪些常用工具包?
- torch:类似NumPy的张量库,强GPU支持;
- torch.autograd:基于tape的自动区别库,支持torch之中的所有可区分张量运行;
- torch.nn:为最大化灵活性未涉及、与autograd深度整合的神经网络库;
- torch.optim:与torch.nn一起使用的优化包,包含SGD、RMSProp、LBFGS、Adam等标准优化方式;
- torch.multiprocessing:python多进程并发,进程之间torchTensors的内存共享;
- torch.utils:数据载入器。具有训练器和其他便利功能;
- torch.legacy(.nn/.optim):处于向后兼容性考虑,从Torch移植来的legacy代码;
到此这篇关于pytorch简介的文章就介绍到这了,更多相关pytorch简介内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!