在深度学习领域,卷积神经网络(CNN)凭借其对图像特征的出色提取能力,成为图像识别任务的核心模型。本文将基于 PyTorch 框架,从零搭建一个卷积神经网络,完成 MNIST 手写数字数据集的识别任务,并详细讲解从数据加载、模型构建到训练与测试的完整流程。
一、环境准备与数据加载
1.1 依赖库导入
首先需要导入实验所需的 Python 库,包括 PyTorch 核心库、数据加载与处理相关库,以及数据集模块:
import torch
from torch import nn
from torch.utils.data import DataLoader
from torchvision import datasets
from torchvision.transforms import ToTensor
1.2 查看 PyTorch 版本
确认当前使用的 PyTorch 版本,确保代码兼容性:
print(torch.__version__)
1.3 MNIST 数据集加载
MNIST 是手写数字数据集,包含 60000 张训练图片和 10000 张测试图片,每张图片为 28×28 像素的灰度图,标签为 0-9 的数字。通过torchvision.datasets.MNIST可直接下载并加载数据集,ToTensor()会将图像转换为 PyTorch 支持的张量格式(取值范围从 0-255 归一化到 0-1):
# 加载训练集
training_data = datasets.MNIST(
root='data', # 数据集保存路径
train=True, # 标记为训练集
download=True, # 若本地无数据集则自动下载
transform=ToTensor(), # 数据转换:图像→张量
)
# 加载测试集
test_data = datasets.MNIST(
root='data',
train=False, # 标记为测试集
download=True,
transform=ToTensor(),
)
# 查看训练集样本数量
print(f"训练集样本数:{len(training_data)}")
print(f"测试集样本数:{len(test_data)}")
1.4 数据批量加载(DataLoader)
为了提高训练效率,使用DataLoader将数据集按批次(batch)划分,每次训练时批量读取数据,同时支持数据打乱(仅训练集)和并行加载:
# 训练集DataLoader:批量大小64,打乱数据
train_dataloader = DataLoader(training_data, batch_size=64, shuffle=True)
# 测试集DataLoader:批量大小64,无需打乱
test_dataloader = DataLoader(test_data, batch_size=64, shuffle=False)
# 查看数据张量


1383

被折叠的 条评论
为什么被折叠?



