当前位置: 首页 > article >正文

PyTorch入门实战:从零搭建你的第一个神经网络

目录

一、PyTorch简介:为什么选择它?

二、环境搭建:5分钟快速安装

 

三、核心概念:张量与自动求导

1. 张量(Tensor):深度学习的数据基石

 

2. 自动求导(Autograd):神经网络训练的核心

四、实战:手写数字识别(MNIST)

1. 数据集加载与预处理

2. 构建卷积神经网络(CNN)

 3. 训练与评估

五、下一步学习建议


一、PyTorch简介:为什么选择它?

        PyTorch是当前最热门的深度学习框架之一,由Facebook AI Research(FAIR)开发并开源。其核心优势在于:

  • 动态计算图:实时调试更灵活,适合科研与快速迭代。

  • Python友好:代码简洁如“伪代码”,学习成本低。

  • 生态丰富支持预训练模型库(如TorchVision、Hugging Face),社区活跃。

二、环境搭建:5分钟快速安装

步骤1:安装Python
推荐使用Python 3.8+版本(官网下载)。

步骤2:安装PyTorch
打开终端,根据系统选择以下命令(以CPU版本为例):

# Windows/Linux通用命令
pip install torch torchvision torchaudio

注:如需GPU加速,请访问PyTorch官网生成CUDA版本安装命令。 

验证安装

import torch
print("PyTorch版本:", torch.__version__)  # 输出示例:2.0.1
print("GPU是否可用:", torch.cuda.is_available())  # 输出示例:False(若未安装GPU驱动)

 

三、核心概念:张量与自动求导

1. 张量(Tensor):深度学习的数据基石

张量是多维数组的扩展,支持GPU加速运算。

基础操作示例

import torch

# 创建张量
a = torch.tensor([[1, 2], [3, 4]])  # 2x2矩阵
b = torch.tensor([[5, 6], [7, 8]])

# 加法
c = a + b
print("加法结果:\n", c)
# 输出:
# tensor([[ 6,  8],
#         [10, 12]])

# 矩阵乘法
d = torch.matmul(a, b)
print("矩阵乘法结果:\n", d)
# 输出:
# tensor([[19, 22],
#         [43, 50]])

 

2. 自动求导(Autograd):神经网络训练的核心

PyTorch通过autograd自动计算梯度,极大简化反向传播过程。

示例:计算函数梯度

x = torch.tensor(3.0, requires_grad=True)  # 启用梯度追踪
y = x**2 + 2*x + 1  # 定义函数 y = x² + 2x + 1

y.backward()  # 反向传播计算梯度
print("x的梯度:", x.grad)  # dy/dx = 2x + 2 → 当x=3时梯度为8.0

四、实战:手写数字识别(MNIST)

1. 数据集加载与预处理

import torch
from torchvision import datasets, transforms

# 定义数据转换
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 = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=64, shuffle=False)

2. 构建卷积神经网络(CNN)

import torch.nn as nn
import torch.nn.functional as F

class MNIST_CNN(nn.Module):
    def __init__(self):
        super(MNIST_CNN, self).__init__()
        self.conv1 = nn.Conv2d(1, 32, kernel_size=3)  # 输入通道1,输出通道32
        self.conv2 = nn.Conv2d(32, 64, kernel_size=3)
        self.fc1 = nn.Linear(1600, 128)  # 全连接层
        self.fc2 = nn.Linear(128, 10)    # 输出层(10类)

    def forward(self, x):
        x = F.relu(self.conv1(x))      # 激活函数
        x = F.max_pool2d(x, 2)         # 最大池化
        x = F.relu(self.conv2(x))
        x = F.max_pool2d(x, 2)
        x = x.view(-1, 1600)           # 展平张量
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return F.log_softmax(x, dim=1) # 输出概率分布

model = MNIST_CNN()
print(model)

 3. 训练与评估

import torch.optim as optim

# 定义损失函数与优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 训练循环
def train(epoch):
    model.train()
    for batch_idx, (data, target) in enumerate(train_loader):
        optimizer.zero_grad()
        output = model(data)
        loss = criterion(output, target)
        loss.backward()
        optimizer.step()
        if batch_idx % 100 == 0:
            print(f'Epoch {epoch} | Batch {batch_idx} | Loss: {loss.item():.4f}')

# 测试循环
def test():
    model.eval()
    test_loss = 0
    correct = 0
    with torch.no_grad():
        for data, target in test_loader:
            output = model(data)
            test_loss += criterion(output, target).item()
            pred = output.argmax(dim=1)
            correct += pred.eq(target).sum().item()
    test_loss /= len(test_loader.dataset)
    accuracy = 100. * correct / len(test_loader.dataset)
    print(f'测试集平均损失: {test_loss:.4f}, 准确率: {accuracy:.2f}%')

# 训练5个Epoch
for epoch in range(1, 6):
    train(epoch)
    test()

运行该段代码即可得到每次训练的测试集平均损失和准确率。 

五、下一步学习建议

1、深入模型优化:学习使用学习率调度器torch.optim.lr_scheduler、数据增强torchvision.transforms

2、探索预训练模型:用TorchVision加载ResNet、VGG等模型进行迁移学习

3、部署实战:将模型导出为ONNX格式,或使用TorchScript实现生产环境部署

互动话题
你在使用PyTorch时遇到过哪些问题?欢迎在评论区留言讨论!

资源推荐

  • PyTorch官方教程

  • 《动手学深度学习》(PyTorch版)


一句话总结:
“PyTorch让深度学习触手可及——从张量到模型,开启你的AI探索之旅!”


http://www.kler.cn/a/551275.html

相关文章:

  • (尚硅谷 Java 学习 B 站大学版)Day17 多态练习
  • 001-监控你的文件-FSWatch-C++开源库108杰
  • 以用户为中心,汽车 HMI 界面设计的创新之道
  • MySQL智障离谱问题,删了库确还存在、也不能再创建同名库
  • 【Pytorch 库】自定义数据集相关的类
  • 基于Unity引擎的网络通信架构深度解析——以NetworkConnectionController为例
  • 聊一聊vue如何实现角色权限的控制的
  • 【16届蓝桥杯寒假刷题营】第2期DAY1I
  • 采用分布式部署deepseek
  • 【白话Spring】三级缓存
  • 【C语言】有序数组的平方
  • 面试真题 | 招银 C++
  • 阿里4面+腾讯4面春招面试题解析,附Java 岗 988 道题分享
  • SQL注入(SQL Injection)详解与实战
  • LVS 负载均衡集群(DR 模式)
  • ThreadLocal为什么会内存溢出
  • 【deepseek之我问】如何把AI技术与教育相结合,适龄教育,九年义务教育,以及大学教育,更着重英语学习。如何结合,给出观点。结合最新智能体Deepseek
  • 【Docker】ollama部署deepseek
  • HDFS是如何存储和管理大数据
  • 移动通信发展史