一、PyTorch简介
PyTorch 是由 Facebook AI Research (FAIR) 于2016年开发的开源深度学习框架,现已成为学术界和工业界最受欢迎的深度学习工具之一。其核心优势在于采用了动态计算图(Dynamic Computation Graph,又称"define-by-run"机制),这使得开发者能够像编写普通Python代码一样构建神经网络,并在运行时动态调整计算图结构,大大提高了研究和实验的灵活性。
在硬件加速方面,PyTorch 提供了完整的GPU加速支持:
- 基于NVIDIA的CUDA并行计算平台
- 使用cuDNN深度神经网络加速库
- 支持多GPU分布式训练(通过torch.nn.DataParallel和DistributedDataParallel)
- 提供CPU/GPU设备自动切换功能(.to(device)方法)
PyTorch的自动微分系统(Autograd)是其最重要的特性之一:
- 自动追踪所有张量操作并构建计算图
- 支持前向传播自动记录和反向传播自动求导
- 提供梯度计算和参数更新的一站式解决方案
- 允许在运行时动态修改计算路径
框架内置了丰富的神经网络组件:
- 超过200种预定义层(如卷积层、LSTM、Transformer等)
- 常用损失函数(交叉熵、MSE等)
- 优化器实现(SGD、Adam等)
- 各种激活函数和归一化层
PyTorch还提供完整的模型生命周期管理工具:
- torchvision等生态库简化数据加载和预处理
- TorchScript支持模型序列化和部署
- ONNX格式导出实现跨框架兼容
- 原生支持移动端部署(PyTorch Mobile)
- 丰富的可视化工具(如TensorBoard集成)
在实际应用中,PyTorch被广泛用于:
- 计算机视觉(图像分类、目标检测)
- 自然语言处理(机器翻译、文本生成)
- 强化学习
- 生成对抗网络(GAN)
- 科学计算等领域
二、PyTorch安装指南
1. 安装前准备
(1) 检查Python版本
PyTorch 要求 Python ≥ 3.7,推荐使用 Python 3.8/3.9。(如果版本低的话可以使用命令更新python版本)
python --version # 检查Python版本
(2) 检查CUDA(GPU用户)
PyTorch 支持 GPU 加速,需安装 NVIDIA驱动 + CUDA Toolkit:
要保证你选择的CUDA版本号<=你的GPU驱动程序版本
版本检查
在cmd里面,输入nvidia-smi查看GPU驱动程序版本:
nvidia-smi # 查看GPU信息
nvcc --version # 查看CUDA版本
注意:PyTorch 版本需与 CUDA 版本匹配(如
CUDA 11.3
对应PyTorch 1.10+
)。
2. 安装PyTorch
官网地址:CUDA Toolkit Archive | NVIDIA Developer
离线安装:
浏览器打开链接:https://download.pytorch.org/whl/cu121
找到torch,点击进入下载页面,找到适合自己cuda版本的安装包,下载即可(使用迅雷下载比较快)
下载完成后,在Anaconda prompt界面切换到自己的虚拟环境,并将目录切换到torch安装包所在的文件夹,输入命令:
torch-2.3.1+cu121-cp310-cp310-win_amd64.whl
测试:
安装完成后,在pycharm中输入代码:
import torch
print(torch.cuda.is_available())
print(torch.__version__)
然后再安装torchvision0.15.2和torchaudio2.0.2,版本号需要和线上安装的版本号一致
pip install torchvision==0.18.1 torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/cu121
(1) 通过PyTorch官网获取安装命令
访问 PyTorch官网,选择:
操作系统(Windows/Linux/macOS)
包管理工具(pip/conda)
Python 版本
CUDA 版本(或选择 CPU 版本)
(2) 示例安装命令
① CPU版本(无GPU)
pip install torch torchvision torchaudio
② GPU版本(CUDA 11.3)
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
③ Conda安装
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
3. 验证安装
import torch
# 检查PyTorch版本
print(torch.__version__) # 输出:1.12.1(示例)
# 检查CUDA是否可用
print(torch.cuda.is_available()) # 输出:True(GPU可用)/ False(仅CPU)
三、PyTorch核心API详解
1. 张量(Tensor)操作
张量(Tensor)是 PyTorch、TensorFlow 等深度学习框架中的核心数据结构,可以理解为多维数组的扩展:
标量(0维张量):单个数字,如
3.14
向量(1维张量):一维数组,如
[1, 2, 3]
矩阵(2维张量):二维表格,如
[[1, 2], [3, 4]]
高阶张量(3维及以上):如 RGB 图像(宽度×高度×通道数)
类比:
NumPy 的
ndarray
→ PyTorch 的Tensor
但张量支持 GPU加速 和 自动微分,专为深度学习优化。
(1) 创建张量
在深度学习和科学计算中,张量是一种多维数组数据结构,是构建神经网络的基本单元。我们可以通过以下几种方式创建张量:
从Python列表或NumPy数组创建:
import torch # 从列表创建1维张量 tensor1 = torch.tensor([1, 2, 3, 4]) # 从嵌套列表创建2维张量 tensor2 = torch.tensor([[1, 2], [3, 4]]) # 从NumPy数组创建 import numpy as np np_array = np.array([5, 6, 7]) tensor3 = torch.from_numpy(np_array)
使用初始化方法创建特定形状的张量:
# 创建全零张量 zeros_tensor = torch.zeros(2, 3) # 2行3列的零矩阵 # 创建全一张量 ones_tensor = torch.ones(3, 3) # 3×3的单位矩阵 # 创建随机值张量 rand_tensor = torch.rand(4, 4) # 4×4的随机矩阵,元素在[0,1)均匀分布 # 创建正态分布张量 normal_tensor = torch.randn(2, 2) # 2×2的标准正态分布矩阵
创建与现有张量形状相同的张量:
existing_tensor = torch.tensor([[1, 2], [3, 4]]) # 创建形状相同但填充不同值的张量 same_shape_zeros = torch.zeros_like(existing_tensor) same_shape_ones = torch.ones_like(existing_tensor) same_shape_rand = torch.rand_like(existing_tensor, dtype=torch.float32)
创建特殊类型张量:
# 创建单位矩阵 eye_tensor = torch.eye(3) # 3×3的单位矩阵 # 创建等差数列张量 arange_tensor = torch.arange(0, 10, 2) # [0, 2, 4, 6, 8] # 创建线性间隔张量 linspace_tensor = torch.linspace(0, 1, 5) # [0.0, 0.25, 0.5, 0.75, 1.0]
在创建张量时,可以通过dtype参数指定数据类型(如torch.float32、torch.int64等),device参数指定计算设备(如'cpu'或'cuda'),requires_grad参数指定是否需要计算梯度(用于自动微分)。
import torch
# 检查CUDA是否可用
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
# 创建浮点型张量(默认float32),位于GPU(如果可用),需要梯度
x = torch.tensor([1.0, 2.0, 3.0],
dtype=torch.float32, # 指定数据类型
device=device, # 指定计算设备
requires_grad=True) # 启用梯度计算
# 创建整型张量(int64),位于CPU,不需要梯度
y = torch.tensor([4, 5, 6], dtype=torch.int64)
# 简单运算(结果会继承x的属性)
z = x * 2 + y.to(device) # 将y移到相同设备
# 反向传播计算梯度
z.sum().backward()
# 查看梯度
print(f"张量x的值: {x}")
print(f"张量x的梯度: {x.grad}")
print(f"张量z是否需要梯度: {z.requires_grad}")
(2) 张量运算
张量的运算是对应位置相互运算,但是张量也可以进行矩阵运算,只是使用的api不同。
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])
# 加法
c = a + b # 或 torch.add(a, b)
print(c) # 输出:tensor([5, 7, 9])
# 矩阵乘法
mat_a = torch.randn(2, 3)
mat_b = torch.randn(3, 2)
mat_c = torch.matmul(mat_a, mat_b) # 或使用 @ 运算符
print(mat_c.shape) # 输出:torch.Size([2, 2])
2. Autograd(自动微分)
PyTorch 的 autograd
模块提供自动求导功能:
x = torch.tensor(2.0, requires_grad=True) # 启用梯度跟踪
y = x ** 2 + 3 * x + 1 # 计算y = x² + 3x + 1
y.backward() # 反向传播计算梯度
print(x.grad) # 输出:7.0(dy/dx = 2x + 3,x=2时梯度为7)
3. 神经网络构建(torch.nn)
(1) 定义神经网络
import torch.nn as nn
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(10, 5) # 全连接层(输入10维,输出5维)
self.relu = nn.ReLU() # 激活函数
self.fc2 = nn.Linear(5, 1) # 输出层(输出1维)
def forward(self, x):
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
return x
model = SimpleNN()
print(model)
(2) 损失函数与优化器
criterion = nn.MSELoss() # 均方误差损失
optimizer = torch.optim.SGD(model.parameters(), lr=0.01) # 随机梯度下降
# 模拟训练数据
inputs = torch.randn(100, 10) # 100个样本,每个10维
targets = torch.randn(100, 1) # 100个标签
# 训练循环
for epoch in range(100):
optimizer.zero_grad() # 清空梯度
outputs = model(inputs) # 前向传播
loss = criterion(outputs, targets) # 计算损失
loss.backward() # 反向传播
optimizer.step() # 更新权重
四、常见问题解决
1. 安装失败
CUDA版本不匹配:卸载旧版本,重新安装匹配的 PyTorch。
网络问题:使用
-i https://pypi.tuna.tsinghua.edu.cn/simple
换源。
2. GPU不可用
检查
torch.cuda.is_available()
。(是否电脑有GPU)确认安装了 CUDA + cuDNN。
五、总结
本文详细介绍了:
PyTorch 的 安装方法(CPU/GPU版本)
张量操作 和 自动微分
神经网络构建 与 训练流程
常见问题解决方案
PyTorch 凭借其灵活性和高效性,已成为深度学习研究的主流工具。建议读者动手实践示例代码,逐步掌握其核心功能!
🚀 进阶学习: