什么是pytorch
PyTorch是一个提供两个高级功能的python包:
具有强GPU加速度的张量计算(如numpy)
深层神经网络建立在基于磁带的自动调整系统上
您可以重用您最喜爱的python软件包,如numpy,scipy和Cython,以便在需要时扩展PyTorch。
PyTorch在细粒度级别是由以下组件组成的库:
包 描述
torch 像NumPy这样的Tensor图书馆,拥有强大的GPU支持
torch.autograd 一种基于磁带的自动分类库,支持所有可区分的Tensor操作手电筒
torch.nn 一个神经网络库与autograd设计了最大的灵活性torch.optim 一种与torch.nn一起使用的优化包,具有标准优化方法,如SGD,RMSProp,LBFGS,Adam等。
torch.multiprocessing python多处理,但是具有魔法内存共享的手电筒传感器跨过程。适用于数据加载和hogwild培训。torch.utils DataLoader,Trainer等实用功能为方便起见
torch.legacy(.nn / .optim) 由于向后兼容性原因,已经从割炬移植的旧代码
通常使用PyTorch可以:
使用GPU的功能代替numpy。 一个深刻的学习研究平台,提供最大的灵活性和速度
进一步阐述:
GPU准备好的Tensor库
如果你使用numpy,那么你已经使用了Tensors(aka ndarray)。 GPU准备好的Tensor库
PyTorch提供可以在CPU或GPU上生活的Tensors,并加速计算量。
我们提供各种各样的张量程序,以加速和适应您的科学计算需求,如切片,索引,数学运算,线性代数,缩减。他们快!
动态神经网络:基于磁带的自动格式
PyTorch具有构建神经网络的独特方式:使用和重放磁带录音机。
大多数框架,比如请输入代码TensorFlow,Theano,Caffe和CNTK拥有世界的静态视图。必须建立一个神经网络,并重复使用相同的结构。改变网络的行为方式意味着必须从头开始。
使用PyTorch,我们使用一种称为反向模式自动分化的技术,它允许您以零延迟或开销改变网络的任意运行方式。我们的灵感来自于在这个题目的几个研究论文,以及当前和过去的工作,如 autograd, autograd, Chainer等。
虽然这种技术并不是PyTorch所特有的,但它是迄今为止最快的实现之一。您可以为您的疯狂研究获得最佳的速度和灵活性。
Python第一
PyTorch不是一个Python绑定到一个单一的C ++框架。它被构建为深入整合到Python中。您可以自然地使用它,就像您将使用numpy / scipy / scikit学习等。您可以使用自己喜欢的库并使用Cython和Numba等软件包,在Python本身编写新的神经网络层。我们的目标是不要在适当的时候重塑轮子。
势在必得的经验
PyTorch的设计是直观的,线性的思想和易于使用。当您执行一行代码时,它将被执行。没有一个异步的世界观。当您进入调试器或接收错误消息和堆栈跟踪时,理解它们是直接的。堆栈跟踪正好指向您的代码定义的位置。我们希望您不要花费几个小时来调试代码,因为堆栈跟踪错误或异步和不透明的执行引擎。
快速和精益
PyTorch具有最小的框架开销。我们集成加速库,如英特尔MKL和NVIDIA(CuDNN,NCCL),以最大限度地提高速度。核心是CPU和GPU Tensor和神经网络后端(TH,THC,THNN,THCUNN)都是用C99 API写成独立的库。 它们已经成熟,并已经过多年的测试。
因此,PyTorch相当快 – 无论您是运行小型或大型神经网络。
PyTorch的内存使用率与Torch或其他一些替代品相比非常有效。我们为GPU编写了自定义内存分配器,以确保您的深入学习模型具有最大的内存效率。这使您能够训练比以前更大的深入学习模型。
扩展没有痛苦
编写新的神经网络模块,或与PyTorch的Tensor API进行接口的设计是简单而且抽象最少的。
您可以使用torch API 或您喜欢的基于numpy的库(如SciPy)在Python中编写新的神经网络层
如果你想用C / C ++图层,我们根据一个扩展API CFFI是有效的,并以最小的样板。 没有需要编写的包装器代码