介绍
PyTorch是由Facebook(现Meta)人工智能研究院开发的开源深度学习框架,核心定位是:
- 兼顾 易用性(动态计算图,新手友好)和高性能(支持GPU加速、分布式训练);
- 既适合科研人员快速验证算法,也适合工程人员落地生产环境;
- 目前是深度学习领域最主流的框架之一,与TensorFlow并列,尤其在学术界、CV(计算机视觉)、NLP(自然语言处理)领域占据主导地位。
官网
特点
1. 动态计算图(最大特色)
PyTorch采用动态计算图(Dynamic Graph),代码执行时即时构建计算图,而不是像TensorFlow 1.x那样先定义静态图再运行:
- 优势:调试像写Python代码一样直观,支持条件判断、循环等动态逻辑,新手能快速定位错误;
- 对比:TensorFlow 2.x也支持动态图,但PyTorch的动态图设计更原生、更灵活。
2. Pythonic 语法(上手成本低)
PyTorch的API设计完全贴合Python习惯,无需学习额外的语法规则,比如:
# PyTorch代码(像普通Python一样直观)
import torch
x = torch.tensor([1, 2, 3])
y = x + 1 # 直接运算,无需特殊封装
print(y) # 输出:tensor([2, 3, 4])
3. 完善的生态与工具链
- 核心库:torch(核心张量运算)、torch.nn(神经网络层)、torch.optim(优化器)、torch.utils.data(数据加载);
- 扩展库:
- torchvision:CV领域(图像预处理、经典模型如ResNet、YOLO);
- torchtext/torchtext Legacy:NLP领域(文本处理、词嵌入);
- torchaudio:音频处理;
- 可视化:TensorBoard、PyTorch Lightning(简化训练流程);
- 部署:TorchScript(静态图导出)、ONNX(跨框架转换)、TorchServe(模型部署)。
4. 高性能与跨平台
- 支持CPU/GPU加速(NVIDIA CUDA、AMD ROCm),Mac下还支持M系列芯片的Metal加速;
- 支持分布式训练(多卡/多机),满足大规模模型训练需求;
- 支持移动端部署(iOS/Android)、边缘设备部署。
功能介绍
1. 张量(Tensor):PyTorch的核心数据结构
张量是PyTorch中表示数据的基本单位,类似NumPy的数组,但支持GPU加速和自动求导:
import torch
# 1. 创建张量
x = torch.tensor([[1.0, 2.0], [3.0, 4.0]]) # 二维张量
y = torch.ones((2, 2)) # 全1张量
z = torch.rand((2, 2)) # 随机张量(0-1)
# 2. 张量运算(支持GPU)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
x = x.to(device) # 移到GPU(如有)
res = x + y # 加法运算
res = x * y # 乘法运算
# 3. 张量属性
print(x.shape) # 形状:torch.Size([2, 2])
print(x.dtype) # 数据类型:torch.float32
print(x.device) # 设备:cuda:0 或 cpu
2. 自动求导(Autograd):深度学习的核心
PyTorch能自动计算张量的梯度,无需手动推导公式,是反向传播的基础:
import torch
# 启用自动求导(requires_grad=True)
x = torch.tensor(2.0, requires_grad=True)
y = x **2 + 3*x + 1 # y = x² + 3x + 1
# 反向传播,计算dy/dx
y.backward()
# 输出梯度(x=2时,dy/dx=2*2+3=7)
print(x.grad) # 输出:tensor(7.)
3. 神经网络构建(torch.nn)
通过nn.Module可以快速构建任意结构的神经网络,内置常用层(卷积、全连接、激活函数等):
import torch
import torch.nn as nn
# 定义简单的全连接神经网络(MNIST分类)
class SimpleNet(nn.Module):
def __init__(self):
super(SimpleNet, self).__init__()
# 定义网络层
self.fc1 = nn.Linear(784, 128) # 输入层(28*28=784)→ 隐藏层
self.relu = nn.ReLU() # 激活函数
self.fc2 = nn.Linear(128, 10) # 隐藏层 → 输出层(10类)
# 定义前向传播
def forward(self, x):
x = x.view(-1, 784) # 展平张量(batch_size, 784)
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
return x
# 实例化网络
model = SimpleNet()
# 移到GPU
model = model.to(device)
# 测试前向传播
input_tensor = torch.rand((1, 1, 28, 28)).to(device) # 模拟MNIST输入
output = model(input_tensor)
print(output.shape) # 输出:torch.Size([1, 10])
4. 训练流程(优化器+损失函数)
import torch.optim as optim
# 1. 定义损失函数和优化器
criterion = nn.CrossEntropyLoss() # 交叉熵损失(分类任务)
optimizer = optim.Adam(model.parameters(), lr=0.001) # Adam优化器
# 2. 单步训练示例
for epoch in range(10): # 训练10轮
running_loss = 0.0
# 模拟训练数据(实际中用DataLoader加载)
inputs = torch.rand((32, 1, 28, 28)).to(device) # batch_size=32
labels = torch.randint(0, 10, (32,)).to(device) # 随机标签
# 清零梯度
optimizer.zero_grad()
# 前向传播
outputs = model(inputs)
# 计算损失
loss = criterion(outputs, labels)
# 反向传播
loss.backward()
# 更新参数
optimizer.step()
running_loss += loss.item()
print(f"Epoch {epoch+1}, Loss: {running_loss/32:.4f}")
适用场景
| 场景 | 优势体现 |
|---|---|
| 学术研究 | 动态图便于快速迭代算法,API灵活,支持自定义层/损失函数 |
| 计算机视觉(CV) | torchvision内置大量经典模型(ResNet、CNN、YOLO),数据预处理工具完善 |
| 自然语言处理(NLP) | 支持Transformer、LSTM等模型,Hugging Face Transformers基于PyTorch开发 |
| 深度学习入门 | Pythonic语法,调试友好,教程资源丰富(官方教程、B站/知乎大量案例) |
| 生产环境部署 | TorchScript导出静态图,TorchServe部署模型,支持GPU/CPU/移动端 |
安装
基础安装(CPU版)
pip3 install torch torchvision
提示: torchvision 是PyTorch生态系统中专注于 计算机视觉 任务的工具库
poetry安装(CPU版)
poetry add torch torchvision
其他安装
详见官网首页介绍:
https://pytorch.org/
总结
- PyTorch是新手友好+生产可用的深度学习框架,动态计算图和Pythonic语法降低了入门门槛;
- 核心优势:动态计算图(调试灵活)、自动求导(简化反向传播)、完善的生态(CV/NLP工具链);
- 适用场景:学术研究、CV/NLP开发、深度学习入门,是当前工业界和学术界的主流选择。