一、什么是 PyTorch?
PyTorch 是一个由 Facebook(现 Meta)人工智能研究院(FAIR)于 2016 年发布的 开源深度学习框架,基于 Python 语言开发,主要用于神经网络建模、训练和部署。
PyTorch 以其灵活、易用、调试友好的特性,迅速成为科研界最受欢迎的深度学习工具之一,同时也广泛应用于工业界的模型开发与部署。
二、PyTorch 的核心特点
| 特点 |
说明 |
| 动态图机制(Dynamic Computational Graph) |
支持动态图(define-by-run),代码执行即计算图构建,调试灵活。 |
| 紧密集成 Python / NumPy |
Tensor 操作风格与 NumPy 类似,便于上手与数据转换。 |
| 强大的 GPU 支持 |
可自动使用 CUDA 加速,训练速度快。 |
| 模块化结构清晰 |
网络层、损失函数、优化器等模块分离,易于扩展和自定义。 |
| 社区活跃、生态丰富 |
与 Hugging Face、TorchVision、PyTorch Geometric 等工具链高度兼容。 |
三、PyTorch 的基本组件结构
| 模块 |
功能 |
torch.Tensor |
核心数据结构,支持自动求导和 GPU 计算 |
torch.nn |
构建神经网络模型的模块 |
torch.optim |
各类优化器(如 SGD、Adam) |
torch.utils.data |
数据加载(Dataset + DataLoader) |
torch.autograd |
自动求导系统,支持反向传播 |
四、PyTorch 简单示例代码
import torch
import torch.nn as nn
import torch.optim as optim
# 定义一个简单的网络
class Net(nn.Module):
def __init__(self):
super().__init__()
self.linear = nn.Linear(784, 10) # 输入784维,输出10类
def forward(self, x):
return self.linear(x)
# 实例化模型、损失函数、优化器
model = Net()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 模拟训练一次
inputs = torch.randn(64, 784) # batch_size = 64
labels = torch.randint(0, 10, (64,))
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward() # 反向传播
optimizer.step() # 更新参数
vs TensorFlow
| 维度 |
PyTorch |
TensorFlow + Keras |
| 计算图类型 |
动态图(更灵活) |
静态图(效率高)+动态图支持 |
| 使用难度 |
上手快,调试方便 |
初学者友好(Keras封装) |
| 社区偏好 |
研究型、论文复现偏多 |
工业部署更成熟 |
| API 风格 |
类 Python / NumPy 风格 |
类 Keras / 结构化风格 |
| 主流支持 |
Meta, Hugging Face 等 |
Google, TensorFlow Hub 等 |
PyTorch 的生态扩展
| 模块/库 |
用途 |
| TorchVision |
图像数据集、模型、预处理工具 |
| TorchText |
文本处理工具包 |
| TorchAudio |
语音信号处理工具 |
| PyTorch Lightning |
训练流程自动化(封装训练循环) |
| Hugging Face Transformers |
大语言模型快速加载与训练 |
| PyTorch Geometric (PyG) |
图神经网络支持 |
学习资源