1、什么是PyTorch
1、一个开源的Python机器学习库。
2、Torch使用了语言Lua作为接口。Lua是简洁高效的。
3、(考虑到python的领先地位,以及其生态完整性和接口易用性,几乎任何框架都不可避免地要提供Python接口)
4、 PyTorch不是简单的封装Torch提供的Python接口,而是对Torch之上的所有模块进行了重构,并新增了先进的自动求导系统,成为当下最流行的动态图框架之一。
5、PyTorch的热度已超越了其他三个框架(Caffe,MXNet,Theano)
2、特点
1、PyTorch可以看作是加入了GPU支持的NumPy。
2、PyTorch通过一种反向自动求导的技术,可以让用户零延迟地任意改变神经网络的行为。目前为止它的实现是最快的。
3、(TensorFlow和Caffe都是命令式的编程语言,而且是静态的。即首选必须建构一个神经 网络,然后一次又一次使用同样的结构。如果想要改变网络的结构,就必须从头开始)
4、PyTorch的设计思路是线性、直观且易于使用的。
5、当计算机执行代码出现bug的时候,可以轻松、快捷的找到出错的代码。不会人用户在调试(Debug)的时候因为错误的指向或者异步和不透明的引擎浪费太多时间
6、相对于TensorFlow来说,PyTorch代码更加简洁、直观,源代码更友好、容易看懂。
3、概述
PyTorch的最大优势是建立的网络是动态的,可以非常容易地输出每一步的调试结果。
1、PyTorch图
如下图:PyTorch的图是随着代码的运行逐步建立起来的,也就是说不需要一开始就定义好全部的网络结构,而是可以随着编码的进行来一点一点地调试。
相比于TensorFlow和Caffe的静态图而言,这种设计更加贴近大多数人的编码习惯
PyTorch的代码示例如下:
import torch.nn as nn
import torch.nn.functional as F
class LeNet(nn.Module):
def _init_(self):
super(LeNet,self)._init_()
self.conv1 = nn.Conv2d(3,6,5)
self.conv2= nn.Conv2d(6,16,5)
self.fc1 = nn.Linear(16*5*5,120)
self.fc2 = nn.Linear(120,84)
self.fc3 = nn.Linear(84,10)
def forward(self,x):
x=F.max_pool2d(F.relu(self.conv1(x)),2)
x=F.max_pool2d(F.relu(self.conv2(x)),2)
x=x.view(-1,16*5*5)
x=F.relu(self,fc1(x))
x=F.relu(self,fc2(x))
x=self.fc3(x)
return x
相比于TensorFlow和Caffe而言,PyTorch可读性非常高。网络各层的定义与传播方法一目了然,甚至不需要过多文档与注释,单凭代码就可以很容易理解其功能。
4、PyTorch生态
PyTorch拥有一个强大且不断扩展的生态系统,它为开发者提供了丰富的工具和库,特别是在深度学习领域的应用中。
1、重要组成部分
(1)PyTorch Lightning:这是一个基于PyTorch的高级计算框架,它简化了深度学习模型的训练流程,使得开发者可以更加专注于模型的设计和实验。
(2)Detectron2:由Facebook AI推出的下一代目标检测框架,专门用于处理计算机视觉任 务。
(3)Transformers:这是一个基于PyTorch的自然语言处理(SOTA)模型库,提供了一系列预训练模型和算法,用于处理NLP任务。
(4)PyTorch Geometric:一个专门用于图神经网络的深度学习扩展库,集成了常见的图神 经网络和数据集。
(5)PyTorch3D:结合了深度学习与3D数据的框架,适用于3D相关的深度学习应用。
(6)Skorch:结合了scikit-learn和PyTorch的机器学习库,旨在提供一个统一接口来使用这 两个库的功能。
(7)TorchVision和TorchVideo:这些工具包分别用于图片和视频处理,在计算机视觉领域 有着广泛的应用。
(8)torchtext:针对自然语言处理任务,torchtext提供了数据处理的工具,帮助开发者更有效地处理文本数据。
PyTorch的生态系统不仅包括了丰富的工具和库,还有着广泛的社区支持和云服务,这些都极大地促进了深度学习技术的发展和应用。
5、优势
1、灵活性高:PyTorch提供了动态图的特性,这意味着在构建模型时可以灵活地更改模型结构,这种灵活性特别适合于研究型项目和实验性开发。动态计算图使得开发者在编写代码时能够即时看到结果,这对于调试和实验非常有帮助。
2、快速原型设计:PyTorch的易用性和灵活性使其成为快速原型设计和小型项目的理想选择。研究者可以快速实现想法并进行测试。
3、易用性好:PyTorch的API设计简洁直观,对于初学者和经验丰富的开发者都非常友好。这使得学习和使用PyTorch变得更加容易。
4、社区支持强大:由Facebook的开发者维护,PyTorch拥有一个活跃的社区和强大的支持。这保证了框架的持续更新和改进,同时也意味着用户可以获得丰富的学习资源和帮助。
5、硬件加速:随着神经网络模型变得越来越复杂,PyTorch也能够利用有能力的硬件来加速模型的训练和推理过程。
总的来说,PyTorch以其高度的灵活性、快速原型设计能力、易用性以及强大的社区支持,在学术界和工业界都获得了广泛的应用和认可。