Torch 是一个十分老牌、对多维矩阵数据进行操作的张量(tensor )库,在机器学习和其他数学密集型应用有广泛应用。但由于其语言采用 Lua,导致在国内一直很小众,并逐渐被支持 Python 的 Tensorflow 抢走用户。如今,作为经典机器学习库 Torch 的端口,PyTorch 为 Python 语言使用者提供了舒适的写代码选择。雷锋网此前对 Torch 做过介绍。详情请看盘点四大民间机器学习开源框架:Theano、Caffe、Torch 和 SciKit-learn 

PyTorch 的特点和优势

PyTorch 提供了:

  • 运行在 GPU 或 CPU 之上、基础的张量操作库,

  • 内置的神经网络库

  • 模型训练功能

  • 支持共享内存的多进程并发(multiprocessing )库。PyTorch 开发团队表示:这对数据载入和 hogwild 训练十分有帮助。

PyTorch 的首要优势是,它处于机器学习第一大语言 Python 的生态圈之中,使得开发者能接入广大的 Python 库和软件。因此,Python 开发者能够用他们熟悉的风格写代码,而不需要针对外部 C 语言或 C++ 库的 wrapper,使用它的专门语言。雷锋网获知,现有的工具包可以与 PyTorch 一起运行,比如 NumPy、SciPy 和 Cython(为了速度把 Python 编译成 C 语言)。

Facebook 发布开源框架 PyTorch, Torch 终于被移植到 Python 生态圈

PyTorch 还为改进现有的神经网络,提供了更快速的方法——不需要从头重新构建整个网络。这是由于 PyTorch 采用了动态计算图(dynamic computational graph)结构,而不是大多数开源框架,比如 TensorFlow、Caffe、CNTK、Theano 等采用的静态计算图。雷锋网(公众号:雷锋网)获知,该技术从另一个 Python 的神经网络框架——Chainer 那里借用。开发者团队还强调 PyTorch 优越的内存效率,因为它采用了定制的 GPU 内存分配器。这使得开发者的深度学习模型能够有“最大限度的内存效能”,训练比从前更大的深度神经网络

虽然 PyTorch 为机器学习应用而优化,这并不是它的唯一使用场景。比如说,相比 NumPy ,PyTorch 的张量计算可作为它对应功能的替代。PyTorch 为这些功能提供了 GPU 加速的版本。在没有强力 GPU 加持的情况下,开发者能使用 CPU 运行。

这是 PyTorch 中包含的工具包列表:

  • torch :类似  NumPy 的张量库,强 GPU 支持 

  • torch.autograd  :基于 tape 的自动区别库,支持 torch 之中的所有可区分张量运行。

  • torch.nn :为最大化灵活性未涉及、与 autograd 深度整合的神经网络库

  • torch.optim:与 torch.nn 一起使用的优化包,包含 SGD, RMSProp, LBFGS, Adam 等标准优化方式

  • torch.multiprocessing: python 多进程并发,进程之间 torch Tensors 的内存共享。

  • torch.utils:数据载入器。具有训练器和其他便利功能。 Trainer and other utility functions for convenience    

  • torch.legacy(.nn/.optim) :处于向后兼容性考虑,从 Torch 移植来的 legacy 代码。