PyTorch详解

部署运行你感兴趣的模型镜像

PyTorch详解

PyTorch 设计哲学

动态计算图(Dynamic Computation Graph)

计算图在运行时动态构建(称为 “Define-by-Run”),允许灵活修改模型结构,适合研究和新算法实验。

对比:TensorFlow 1.x 的静态图需先定义后执行,而 PyTorch 的动态图更接近 Python 原生编程体验。

Python 原生风格

深度集成 Python 生态,支持直接使用 if、for 等控制流,调试方便(如 pdb)。

GPU 优先的张量计算

torch.Tensor 提供类似 NumPy 的接口,但支持自动微分和 GPU 加速。

核心组件与功能

张量(Tensor)

基础操作:
import torch
x = torch.tensor([[1, 2], [3, 4]], dtype=torch.float32)  # 创建张量
y = torch.randn(2, 2, device='cuda')                   # GPU 张量
z = x + y.to('cpu')                                    # 跨设备运算
自动微分(Autograd):
x = torch.tensor(3.0, requires_grad=True)
y = x**2 + 2*x
y.backward()  # 计算梯度
print(x.grad) # 输出: tensor(8.0)  (dy/dx = 2x + 2)

神经网络模块(torch.nn)

定义模型:
class CNN(torch.nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = torch.nn.Conv2d(1, 32, kernel_size=3)
        self.fc = torch.nn.Linear(32 * 26 * 26, 10)  # MNIST 分类

    def forward(self, x):
        x = torch.relu(self.conv1(x))
        x = x.view(-1, 32 * 26 * 26)  # 展平
        return self.fc(x)
model = CNN().cuda()  # 移至 GPU
损失函数与优化器:
criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

数据处理(torch.utils.data)

自定义数据集:
from torch.utils.data import Dataset, DataLoader
class MyDataset(Dataset):
    def __init__(self, data):
        self.data = data
    def __len__(self):
        return len(self.data)
    def __getitem__(self, idx):
        return self.data[idx]

dataset = MyDataset(torch.randn(100, 3))
loader = DataLoader(dataset, batch_size=16, shuffle=True)

训练循环

for epoch in range(10):
    for inputs, labels in loader:
        optimizer.zero_grad()
        outputs = model(inputs.cuda())
        loss = criterion(outputs, labels.cuda())
        loss.backward()
        optimizer.step()
    print(f"Epoch {epoch}, Loss: {loss.item():.4f}")

高级特性

动态图控制流

def dynamic_forward(x, n_layers):
    for i in range(n_layers):
        if i % 2 == 0:
            x = torch.relu(x)
        else:
            x = torch.sigmoid(x)
    return x

混合精度训练(AMP)

scaler = torch.cuda.amp.GradScaler()
with torch.cuda.amp.autocast():
    outputs = model(inputs)
    loss = criterion(outputs, labels)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()

分布式训练

单机多卡(DataParallel / DistributedDataParallel):

model = torch.nn.DataParallel(model)  # 简单并行
# 或使用更高效的 DDP
torch.distributed.init_process_group(backend='nccl')
model = torch.nn.parallel.DistributedDataParallel(model)

模型部署与生产化

TorchScript(模型序列化)

scripted_model = torch.jit.script(model)  # 转换为脚本
scripted_model.save("model.pt")
# 加载模型
loaded_model = torch.jit.load("model.pt")

ONNX 导出

dummy_input = torch.randn(1, 3, 224, 224)
torch.onnx.export(model, dummy_input, "model.onnx", opset_version=11)

移动端部署(LibTorch)

使用 C++ 加载 PyTorch 模型:

torch::jit::script::Module module = torch::jit::load("model.pt");
torch::Tensor input = torch::ones({1, 3, 224, 224});
torch::Tensor output = module.forward({input}).toTensor();

生态工具

工具库用途
TorchVision计算机视觉(数据集、预训练模型)
TorchText NLP文本处理
PyTorch Lightning简化训练流程的高层封装
HuggingFace Transformers预训练 NLP 模型(BERT、GPT等)
Fast.ai高级 API 快速训练模型

与 TensorFlow 的关键对比

特性PyTorchTensorFlow
计算图动态图(即时执行)静态图(TF 1.x)或动态图(TF 2.x)
调试直接使用 Python 调试工具依赖 TensorBoard 或 Eager 模式
部署需转换为 TorchScript/ONNX原生支持(TF Serving、TFLite)
社区学术界主导,研究前沿工业界广泛使用
API设计 灵活,接近原生 PythonKeras 标准化,适合快速开发

经典应用示例

Transformer 模型(NLP)

from transformers import BertModel
model = BertModel.from_pretrained("bert-base-uncased")
inputs = tokenizer("Hello, PyTorch!", return_tensors="pt")
outputs = model(**inputs)

GAN(生成对抗网络)

generator = nn.Sequential(
    nn.Linear(100, 256),
    nn.LeakyReLU(),
    nn.Linear(256, 784),
    nn.Tanh()
)
discriminator = nn.Sequential(
    nn.Linear(784, 256),
    nn.LeakyReLU(),
    nn.Linear(256, 1),
    nn.Sigmoid()
)

适用场景建议

选择 PyTorch 若:

需要快速实验或研究新模型。

重视代码可读性和调试便利性。

从事学术界或前沿 AI 研究(如 NLP、GAN)。

选择 TensorFlow 若:

需要直接部署到生产环境(如移动端、Web)。

使用 Keras 快速构建标准模型(如图像分类)。

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值