什么是PyTorch

PyTorch 是另一个广泛使用的开源深度学习框架,由 Facebook 开发。它以动态计算图为核心特性,在研究和工业界都有大量应用。以下从基础概念、使用流程、代码示例等方面为你介绍 PyTorch。

基础概念

  • 张量(Tensors):类似于 NumPy 的多维数组,但可以在 GPU 上加速运算。张量是 PyTorch 中数据的基本载体,模型的输入、输出以及参数都以张量形式存在。
  • 自动求导(Autograd):PyTorch 的自动求导机制能够自动计算张量的梯度,这使得构建和训练神经网络变得非常方便。在定义计算图时,PyTorch 会自动记录所有的操作,当调用反向传播时,它会根据这些记录自动计算梯度。
  • 动态计算图(Dynamic Computational Graphs):与 TensorFlow 的静态计算图不同,PyTorch 的计算图是动态的,这意味着在运行时可以根据需要改变计算图的结构,使得代码更加灵活,调试也更加容易。

在 AI 解决方案流程中使用 PyTorch

  1. 数据准备 :PyTorch 提供了torch.utils.data模块,其中包含DatasetDataLoader类。Dataset用于封装数据集,而DataLoader则用于批量加载数据,支持多线程加载,提高数据处理效率。
  2. 模型选择与训练 :可以使用torch.nn模块构建神经网络模型,通过继承torch.nn.Module类来定义自定义的模型结构。同时,PyTorch 提供了丰富的优化器(如torch.optim.SGDtorch.optim.Adam)和损失函数(如torch.nn.CrossEntropyLoss)用于模型训练。
  3. 部署与集成:PyTorch 支持将训练好的模型导出为多种格式,如 ONNX(Open Neural Network Exchange),方便在不同的硬件平台和推理引擎上进行部署。

PyTorch 示例代码

以下是一个使用 PyTorch 构建并训练简单的全连接神经网络来对 MNIST 手写数字数据集进行分类的示例:

import torch

import torch.nn as nn

import torch.optim as optim

from torchvision import datasets, transforms

from torch.utils.data import DataLoader

数据预处理

transform = transforms.Compose([

transforms.ToTensor(),

transforms.Normalize((0.1307,), (0.3081,))

])

加载MNIST数据集

train_dataset = datasets.MNIST(root='./data', train=True,

download=True, transform=transform)

test_dataset = datasets.MNIST(root='./data', train=False,

download=True, transform=transform)

创建数据加载器

train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)

test_loader = DataLoader(test_dataset, batch_size=1000, shuffle=False)

定义神经网络模型

class SimpleNet(nn.Module):

def init(self):

super(SimpleNet, self).init()

self.fc1 = nn.Linear(28 * 28, 128)

self.fc2 = nn.Linear(128, 10)

def forward(self, x):

x = x.view(-1, 28 * 28)

x = torch.relu(self.fc1(x))

x = self.fc2(x)

return x

model = SimpleNet()

定义损失函数和优化器

criterion = nn.CrossEntropyLoss()

optimizer = optim.Adam(model.parameters(), lr=0.001)

训练模型

for epoch in range(5):

running_loss = 0.0

for i, (images, labels) in enumerate(train_loader):

optimizer.zero_grad()

outputs = model(images)

loss = criterion(outputs, labels)

loss.backward()

optimizer.step()

running_loss += loss.item()

print(f'Epoch {epoch + 1}, Loss: {running_loss / len(train_loader)}')

评估模型

correct = 0

total = 0

with torch.no_grad():

for images, labels in test_loader:

outputs = model(images)

_, predicted = torch.max(outputs.data, 1)

total += labels.size(0)

correct += (predicted == labels).sum().item()

print(f'Test accuracy: {100 * correct / total}%')

代码解释

  1. 数据加载与预处理 :使用torchvision库加载 MNIST 数据集,并进行归一化处理。
  2. 模型定义 :定义一个简单的全连接神经网络SimpleNet,包含两个线性层。
  3. 损失函数和优化器:使用交叉熵损失函数和 Adam 优化器。
  4. 模型训练:通过多个 epoch 对模型进行训练,每个 epoch 中遍历训练数据,计算损失并进行反向传播更新模型参数。
  5. 模型评估:在测试数据集上评估模型的准确率。
相关推荐
好奇龙猫6 小时前
【AI学习-comfyUI学习-第三十节-第三十一节-FLUX-SD放大工作流+FLUX图生图工作流-各个部分学习】
人工智能·学习
沈浩(种子思维作者)6 小时前
真的能精准医疗吗?癌症能提前发现吗?
人工智能·python·网络安全·健康医疗·量子计算
minhuan6 小时前
大模型应用:大模型越大越好?模型参数量与效果的边际效益分析.51
人工智能·大模型参数评估·边际效益分析·大模型参数选择
Cherry的跨界思维6 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
MM_MS6 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
ASF1231415sd6 小时前
【基于YOLOv10n-CSP-PTB的大豆花朵检测与识别系统详解】
人工智能·yolo·目标跟踪
njsgcs7 小时前
ue python二次开发启动教程+ 导入fbx到指定文件夹
开发语言·python·unreal engine·ue
io_T_T7 小时前
迭代器 iteration、iter 与 多线程 concurrent 交叉实践(详细)
python
水如烟7 小时前
孤能子视角:“意识“的阶段性回顾,“感质“假说
人工智能
华研前沿标杆游学7 小时前
2026年走进洛阳格力工厂参观游学
python