当前位置: 首页>>机器学习>>正文


PyTorch入门简介

qingchuan 机器学习 , , , 去评论

PyTorch是一个python包,提供两类高级功能:

  • 具有强大的GPU加速度的张量计算(类似numpy)
  • 基于tape-based的自动微分(autodiff)系统的深度神经网络

您可以重用自己喜欢的python包,例如numpy,scipy和Cython,以便在需要时扩展PyTorch。

从更细的粒度来说,PyTorch是一个由以下组件组成的库:

描述
torch 像NumPy这样的Tensor库,具有强大的GPU支持
torch.autograd 基于tape的自动微分库,支持torch中所有可微分的Tensor操作
torch.nn 与autograd深度集成的神经网络库,旨在实现最大的灵活性
torch.optim 与torch.nn一起使用的优化包,使用标准优化方法,如SGD,RMSProp,LBFGS,Adam等。
torch.multiprocessing python多处理,但具有神奇的内存共享跨进程传递torch Tensor。适用于数据加载和hogwild训练。
torch.utils 为DataLoader,Trainer和其他实用程序功能提供便捷的辅助包
torch.legacy(.nn /.optim) 由于向后兼容性原因而从torch移植过的遗留代码

通常使用PyTorch作为:

  • 替代numpy使用GPU强大能力。
  • 深度学习研究平台,提供最大的灵活性和速度

进一步阐述:

为GPU而生的Tensor库

如果你使用numpy,那么你使用了Tensors(a.k.a ndarray)。

tensor_illustration

PyTorch提供可以在CPU或GPU上运行的Tensors,并且可以大幅加速计算。

我们提供各种张量程序,以加速和满足您的科学计算需求,如切片,索引,数学运算,线性代数,约简。这些操作都非常快!

动态神经网络:基于磁带模式的Autograd

PyTorch有一种独特的构建神经网络的方法:使用和重放录音机。

大多数框架如TensorFlowTheanoCaffeCNTK有一个静态的世界观。人们必须建立一个神经网络,并一次又一次地重复使用相同的结构。改变网络的行为方式意味着必须从头开始。

使用PyTorch,我们使用一种名为Reverse-mode auto-differentiation的技术,它允许您以零滞后或开销任意改变网络的行为方式。我们的灵感来自几个关于这个主题的研究论文,以及当前和过去的工作,如autogradautogradChainer

虽然这种技术并不是PyTorch独有的,但它是迄今为止最快的实现之一。您可以获得最佳的速度和灵活性,以进行狂热的研究。

dynamic_graph

Pytorch跟Python的关系

PyTorch不是Python绑定到monolothic C++的框架。它被构建为深入集成到Python中。您可以像使用numpy /scipy /scikit-learn等自然地使用它。您可以使用自己喜欢的库编写新的神经网络层,使用Cython和Numba等软件包。我们的目标是在适当的时候不要重新发明轮子。

体验

PyTorch设计直观,线性思维,易于使用。当您执行一行代码时,它会被执行。没有所谓的全运行环境的异步视图。当您进入调试器或接收错误消息和堆栈跟踪时,理解它们是straight-forward。 stack-trace指向您的代码定义的确切位置。我们希望您不要因为堆栈跟踪错误或异步和不透明的执行引擎,而花费数小时调试代码。

快速和精益

PyTorch具有最小的框架开销。我们集成了英特尔MKL和NVIDIA(CuDNN,NCCL)等加速库,以最大限度地提高速度。其核心是CPU和GPU Tensor和神经网络后端(TH,THC,THNN,THCUNN)作为具有C99 API的独立库编写。
它们已经成熟并经过多年的测试。

因此,PyTorch非常快 - 无论你运行小型还是大型神经网络。

与Torch或其他一些替代方案相比,PyTorch中的内存使用效率非常高。我们为GPU编写了自定义内存分配器,以确保您的深度学习模型具有最大的内存效率。这使您能够训练比以前更大的深度学习模型。

扩展没有痛苦

编写新的神经网络模块,或与PyTorch的Tensor API连接,设计为straight-forward,并且具有最少的抽象。

您可以使用torch API在Python中编写新的神经网络层或者你最喜欢的基于numpy的库,比如SciPy

如果您想用C/C++编写图层,我们会提供基于CFFI的扩展API,这是有效的,并且具有最少的样板。
没有需要编写的包装代码。你可以在这里看到一个例子

参考资料

本文由《纯净的天空》出品。文章地址: https://vimsky.com/article/3886.html,未经允许,请勿转载。