1.1 PyTorch简介
PyTorch是一个Python的开源机器学习库,是Python优先的深度学习框架。PyTorch是科学计算框架Torch在Python上的衍生,PyTorch的产生受到了Torch和Chainer这两个框架的启发。Torch使用Lua作为开发语言,PyTorch则使用了Python作为开发语言。与Chainer类似,PyTorch具有自动求导的动态图功能,也就是所谓的define by run,即当Python解释器运行到相应的行时才创建计算图。
在PyTorch诞生之前,像Caffe和Torch是很受欢迎的深度学习库。随着深度学习的快速发展,开发人员和研究人员希望有一个高效、易于使用的框架,并且能够以Python编程语言构建、训练和评估神经网络。Python是数据科学家和机器学习中最受欢迎的编程语言之一,研究人员希望在Python生态系统中使用深度学习算法是很自然的需求。
PyTorch的初始版本由Adam Paszke、Sam Gross与Soumith Chintala等人牵头开发,由Facebook赞助,并得到Yann LeCun(著名计算机科学家,2018年图灵奖得主)的认可。2017年1月,Facebook人工智能研究院(FAIR)团队在GitHub上开源了PyTorch。
PyTorch通过创建既pythonic又易于自定义的API,在易于使用的同时又提供了研究人员所需的低水平API。发布以来,PyTorch受到越来越多的关注和使用,是当前学术领域使用最多、最受欢迎的深度学习框架。PyTorch允许研究人员利用GPU的算力来实现神经网络的加速,提供了自动微分机制,研究人员可以使用PyTorch轻松构建复杂神经网络。
PyTorch主要有以下特点。
(1)易用性和灵活性。PyTorch提供易于使用的API,使用动态计算图模式确保了易用性和灵活性。PyTorch允许用户在运行时构建计算图,甚至在运行时更改它们。
(2)Python的支持。PyTorch可以顺利地与Python数据科学栈集成,它非常类似于NumPy。PyTorch旨在深度集成到Python中,我们可以像使用NumPy、SciPy、Scikit-learn等库一样自然地使用它。
(3)部署简单。PyTorch提供了可用于大规模部署PyTorch模型的工具TorchServe。TorchServe是PyTorch开源项目的一部分,是一个易于使用的工具,用于大规模部署PyTorch模型。PyTorch还提供了TorchScript,用于在高性能的C++运行环境中实现模型部署。
(4)支持分布式训练。PyTorch可实现研究和生产中的分布式训练和性能优化。
(5)强大的生态系统。PyTorch具有丰富的工具和库等生态系统,为计算机视觉、自然语言处理(natural language processing,NLP)等方面的开发提供了便利。
(6)内置开放神经网络交换协议(open neural network exchange,ONNX)。ONNX内置于PyTorch的核心,因此将模型迁移到ONNX不需要用户安装任何其他包或工具,这使得PyTorch可以很方便地与其他深度学习框架互操作。通过ONNX格式,研究人员可轻松地将在PyTorch上开发的模型部署到适用于生产的平台上。
(7)支持移动端。PyTorch支持从Python到iOS和安卓系统部署的端到端工作流程。
总之,PyTorch是一个简洁且高效快速的深度学习框架。PyTorch简单易用和出色的性能及易于调试性让其受到了数据科学家和深度学习研究人员的欢迎和认可。PyTorch的设计追求最少的封装,其大量使用了Python概念,例如类、结构和条件循环,允许用户以面向对象的方式构建深度学习算法。PyTorch支持用户在前向传播过程(forward pass)中定义Python允许执行的任何操作。反向传播过程(backward pass)自动从图中找到去往根节点的路径,并在返回时计算梯度。这样的设计使得用户可以专注于实现自己的想法,而不需要考虑太多关于框架本身的束缚。同时,PyTorch的灵活性不以速度为代价,在许多评测中,PyTorch的速度表现胜过TensorFlow和Keras等流行框架。