从零开始构建卷积神经网络(CNN)进行MNIST手写数字识别

在深度学习领域,卷积神经网络(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)

# 查看数据张量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值