什么是PyTorch

[复制链接]
发表于 2025-9-17 22:17:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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


  • 张量(Tensors):类似于 NumPy 的多维数组,但可以在 GPU 上加快运算。张量是 PyTorch 中数据的根本载体,模子的输入、输出以及参数都以张量情势存在。
  • 主动求导(Autograd):PyTorch 的主动求导机制能够主动计算张量的梯度,这使得构建和练习神经网络变得非常方便。在定义计算图时,PyTorch 会主动记录全部的操作,当调用反向传播时,它会根据这些记录主动计算梯度。
  • 动态计算图(Dynamic Computational Graphs):与 TensorFlow 的静态计算图差异,PyTorch 的计算图是动态的,这意味着在运行时可以根据必要改变计算图的布局,使得代码更加机动,调试也更加轻易。
在 AI 解决方案流程中使用 PyTorch


  • 数据准备:PyTorch 提供了torch.utils.data模块,其中包罗Dataset和DataLoader类。Dataset用于封装数据集,而DataLoader则用于批量加载数据,支持多线程加载,进步数据处理服从。
  • 模子选择与练习:可以使用torch.nn模块构建神经网络模子,通过继承torch.nn.Module类来定义自定义的模子布局。同时,PyTorch 提供了丰富的优化器(如torch.optim.SGD、torch.optim.Adam)和丧失函数(如torch.nn.CrossEntropyLoss)用于模子练习。
  • 摆设与集成: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}%') 
代码表明


  • 数据加载与预处理:使用torchvision库加载 MNIST 数据集,并举行归一化处理。
  • 模子定义:定义一个简朴的全毗连神经网络SimpleNet,包罗两个线性层。
  • 丧失函数和优化器:使用交错熵丧失函数和 Adam 优化器。
  • 模子练习:通过多个 epoch 对模子举行练习,每个 epoch 中遍历练习数据,计算丧失并举行反向传播更新模子参数。
  • 模子评估:在测试数据集上评估模子的精确率。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表