来源:永远别说永远
一、PyTorch 简介
PyTorch 是由 Meta(原 Facebook)AI 研究院开发的开源深度学习框架,基于 Python 实现,具有动态计算图与自动求导机制的特性。
其核心目标是:在保持灵活性的同时,实现高性能的深度学习建模与训练。
PyTorch 的底层采用 C++ 实现高效计算内核,上层通过 Python 提供接口封装。
相较于 TensorFlow 的静态图机制,PyTorch 的动态图设计使得模型定义与调试更加直观。
二、NumPy 与 PyTorch 的关系
如果读者已经具备 NumPy 基础,那么学习 PyTorch 会非常顺利。
两者在语法和操作上高度相似,主要区别在于以下几点:
|
|
|
|
|---|---|---|
|
|
ndarray |
torch.Tensor |
|
|
|
cuda())
|
|
|
|
requires_grad=True)
|
|
|
|
torch.nn、torch.optim 等模块
|
示例对比:
# NumPy
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.ones((2, 2))
print(a + b)
# PyTorch
import torch
x = torch.tensor([[1, 2], [3, 4]], dtype=torch.float32)
y = torch.ones((2, 2))
print(x + y)
结果完全一致,但 PyTorch 的张量 Tensor 还可以支持 GPU 加速与梯度计算:
x = torch.tensor([[1, 2], [3, 4]], dtype=torch.float32, requires_grad=True)
y = x ** 2
y.sum().backward() # 自动求导
print(x.grad)
三、张量(Tensor)基础
张量是 PyTorch 的核心数据结构。
其可以看作是多维数组,支持矩阵运算、索引、切片、广播等操作。
常用创建方法:
torch.tensor([[1,2],[3,4]]) # 直接定义
torch.zeros((3,3)) # 全零张量
torch.ones((2,4)) # 全一张量
torch.rand((2,3)) # 随机张量
torch.arange(0,10,2) # 序列张量
重要属性与方法:
|
|
|
|---|---|
.shape |
|
.dtype |
|
.device |
|
.requires_grad |
|
.numpy() |
|
.to(device) |
|
四、PyTorch 框架结构
PyTorch 由多个模块组成,各自承担不同功能,整体结构清晰而模块化。
理解这些模块是掌握 PyTorch 的关键。
|
|
|
|
|---|---|---|
torch |
|
torch.tensor()
torch.matmul()
|
torch.nn |
|
nn.Linear
nn.Conv2d
|
torch.optim |
|
optim.Adam
optim.SGD
|
torch.utils.data |
|
DataLoader
Dataset
|
torchvision/torchtext/torchaudio |
|
|
torch.jit |
|
torch.jit.trace
torch.jit.save
|
下面分别说明主要模块:
1. torch —— 底层核心
包含张量运算、线性代数、随机生成与自动求导系统。
PyTorch 的一切运算都以 Tensor 为基础,计算图由系统自动维护。
2. torch.nn —— 神经网络模块
用于定义和管理神经网络结构。所有网络层都继承自 nn.Module。
常用组件:
|
|
|
|
|---|---|---|
|
|
nn.Linear
nn.Conv2d
|
|
|
|
nn.ReLU
nn.Sigmoid
|
|
|
|
nn.Dropout
nn.BatchNorm2d
|
|
|
|
nn.Sequential
nn.ModuleList
|
|
|
|
nn.CrossEntropyLoss
nn.MSELoss
|
|
3. torch.optim —— 优化器模块
负责模型参数的更新。
常见算法包括 SGD、Adam、RMSprop 等。
示例:
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
loss.backward()
optimizer.step()
optimizer.zero_grad()
4. torch.utils.data —— 数据接口
提供高效的数据加载与批处理机制。
核心类:
Dataset:自定义数据集读取方式DataLoader:支持批量读取与多线程加载
loader = DataLoader(dataset, batch_size=64, shuffle=True)
5. torchvision / torchaudio / torchtext
PyTorch 官方任务扩展库,提供常用数据集与预训练模型,便于快速实验。
6. torch.jit —— 模型加速与部署
用于将动态模型转换为静态图形式,便于优化与跨平台部署。
五、PyTorch 编程逻辑:搭建式思维
深度学习框架的核心思想是“模块化组合”。
PyTorch 已将所有关键组件(网络层、优化器、损失函数、激活函数等)封装完毕,用户只需按照计算逻辑将它们合理组合。
一个典型的训练流程如下:
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader
# 1. 定义模型
class MLP(nn.Module):
def __init__(self):
super().__init__()
self.net = nn.Sequential(
nn.Linear(784, 256),
nn.ReLU(),
nn.Linear(256, 10)
)
def forward(self, x):
return self.net(x)
# 2. 初始化
model = MLP()
optimizer = optim.Adam(model.parameters(), lr=1e-3)
criterion = nn.CrossEntropyLoss()
# 3. 训练循环
for x, y in DataLoader(dataset, batch_size=64):
optimizer.zero_grad()
preds = model(x)
loss = criterion(preds, y)
loss.backward()
optimizer.step()
这体现了 PyTorch 的设计哲学:
所有深度学习过程都可在 torch 中找到对应模块,用户只需进行“积木式组合”。
六、常用函数与操作速查表
|
|
|
|
|---|---|---|
|
|
torch.tensor
torch.zeros, torch.ones, torch.rand
|
|
|
|
torch.cat
torch.stack, torch.reshape, torch.transpose
|
|
|
|
torch.mean
torch.sum, torch.max, torch.matmul
|
|
|
|
F.relu
F.sigmoid, F.softmax, F.tanh
|
|
|
|
nn.MSELoss
nn.CrossEntropyLoss
|
|
|
|
optim.SGD
optim.Adam, optim.RMSprop
|
|
|
|
DataLoader
Dataset
|
|
七、总结
PyTorch 的学习关键在于理解其结构逻辑:
张量(Tensor)是基础,自动求导是核心,nn 模块是灵魂,优化器与数据接口是驱动。
一旦掌握了这些核心概念,构建任何深度学习模型——无论是 CNN、RNN、Transformer 还是自定义结构——都将变得系统且高效。
本文仅作学术信息分享,如有侵犯请联系删除

