PyTorch深度学习框架介绍

介绍

PyTorch是由Facebook(现Meta)人工智能研究院开发的开源深度学习框架,核心定位是:

  • 兼顾 易用性(动态计算图,新手友好)和高性能(支持GPU加速、分布式训练);
  • 既适合科研人员快速验证算法,也适合工程人员落地生产环境;
  • 目前是深度学习领域最主流的框架之一,与TensorFlow并列,尤其在学术界、CV(计算机视觉)、NLP(自然语言处理)领域占据主导地位。

官网

https://pytorch.org/

特点

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/

总结

  1. PyTorch是新手友好+生产可用的深度学习框架,动态计算图和Pythonic语法降低了入门门槛;
  2. 核心优势:动态计算图(调试灵活)、自动求导(简化反向传播)、完善的生态(CV/NLP工具链);
  3. 适用场景:学术研究、CV/NLP开发、深度学习入门,是当前工业界和学术界的主流选择。

原文出处:/show_1GW2YUseIgCT.html