中文文档

PyTorch 是一个 python 包, 它提供了以下两种高级特性:

你可以重用你最喜欢的 python 包, 比如 numpy, scipy 和 Cython, 以便在需要时扩展 PyTorch.

从粒度级别上来看, PyTorch 是一个由以下组件来构成的库:

Package(包) Description(描述)
torch 一个像 NumPy 这样的张量库, 具有强大的 GPU 支持
torch.autograd 一个基于 tape 的自动微分库, 它支持 torch 中所有可微分的张量操作
torch.nn 一个与自动求导深度集成的神经网络库, 旨在实现最大的灵活性
torch.optim 一个可以和 torch.nn 使用的优化包, 它具有标准的优化方法, 如 SGD, RMSProp, LBFGS, Adam 等等.
torch.multiprocessing python 多进程处理, but with magical memory sharing of torch Tensors across processes. Useful for data loading and hogwild training.
torch.utils DataLoader(数据加载器), Trainer(训练器) 和一些其它便利的函数
torch.legacy(.nn/.optim) 由于向后兼容的原因, 已经从 torch 移植过来的旧代码

通常使用 PyTorch 作为:

进一步详细说明:

一个只读的 GPU 张量库

如果你使用 numpy, 那么你已经使用了张量 (a.k.a ndarray).

tensor_illustration

PyTorch 提供可以存在于 CPU 或 GPU 上的张量, 并且可以做大量加速计算.

我们提供各种各样的张量程序以加速和适合您的科学计算需求, 如切片, 索引, 数学运算, 线性代数, 归约计算, 等等. 它们很快!

动态神经网络: 基于 Tape 的自动求导

PyTorch 有一个构建神经网络的独特方式: using and replaying a tape recorder.

TensorFlow, Theano, CaffeCNTK 等大多数框架都有一个静态的世界观. 一个人构建了神经网络, 并重复使用了相同的数据结构. 改变网络的行为, 就意味着必须要重新开始.

在 PyTorch 中, 我们使用了一个称为 Reverse-mode auto-differentiation(反向模式和自动微分的)技术, 它可以让你用零延迟或增加开销的方式任意的改变网络的行为. 我们的灵感来自于该主题的几篇论文, 以及当前和过去的工作, 例如 autograd, autograd, Chainer, 等等.

虽然这种技术并不是 PyTorch 所独有的, 但它是迄今为止最快的实现之一. 你可以为了你的科研来使用它, 以获得最好的速度和灵活性.

dynamic_graph

Python 优先的

PyTorch 不是一个 Python 绑定到庞大的 C++ 框架. 它被设计为与 Python 的深度集成. 你可以像是用 numpy / scipy / scikit-learn 等技术那样自然的使用它. 你可以用 Python 编写你自己全新的神经网络层, 使用你最喜欢的库和包, 比如 Cython 和 Numba. 我们的目标是在适当的时候不要重新发明轮子.

必要的经验

PyTorch 被设计为直观的, 思想线性的, 易于使用的. 当你执行一行代码时, 它就会被执行. 这里的世界观没有异步的观点. 当你进入调试器, 或接收到错误消息和堆栈跟踪时, 理解它们是非常简单的. 堆栈跟踪指向您的代码的确切位置. 我们希望你永远不要由于堆栈跟踪不好, 或者是异步和不透明的执行引擎的原因, 来花费数小时的时间调试代码.

Fast and Lean

PyTorch 具有最小的框架开销. 我们集成了像 Intel MKL 和 NVIDIA (CuDNN, NCCL) 这样的加速库以最大化速度. 其核心是, 它们的 CPU 和 GUP 张量和神经网络后端 (TH, THC, THNN, THCUNN) 都是用 C99 API 所编写的独立库.
它们都是非常成熟的, 并且已经经历了多年的测试.

因此, PyTorch 的速度是十分快的 – 无论您运行的是小型还是大型的神经网络.

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

便利的扩展机智

编写新的神经网络模块, 或者与 PyTorch 的 Tensor API 接口做交互, 它们的设计都很简单, 并且抽象程度极低.

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

如果您想用 C/C++ 来编写神经网络层, 我们提供了一个基于 cffi 的扩展 API, 它是高效的, 并且最小化了模版文件.
这里是一个没有包装器的需要编写的代码. 您可以在这里阅读示例.