《深度学习》—— 卷积神经网络模型(CNN)对手写数字的识别

一、数据集介绍

  • 此模型训练的数据集是 torchvision 库中 datasets 数据包中的 MNIST 数据集

  • MNIST 数据集中含有 70000 张由不同的人手写数字图像,其中60000张训练集,10000张是测试集

  • 每张图片都是灰度的,大小为28x28像素,且每张图片中的数字都是剧中的,以减少预处理和加块模型训练

  • 导入此数据包,提取出训练集和测试集,并展示出部分手写图片,代码如下:

    from torchvision import datasets 
    
    """ 下载训练数据集 (包含训练数据+标签)"""
    training_data = datasets.MNIST(
        root='data',
        train=True,
        download=True,
        transform=ToTensor()  # 张量,图片是不能直接传入神经网络模型
    )  # 对于pytorch库能够识别的数据一般是tensor张量.
    # NumPy 数组只能在CPU上运行。Tensor可以在GPU上运行,这在深度学习应用中可以显著提高计算速度。
    
    """ 下载测试数据集(包含训练图片+标签)"""
    test_data = datasets.MNIST(
        root='data',
        train=False,
        download=True,
        transform=ToTensor()
    )
    print(len(training_data))
    
    """ 展示手写字图片 """
    # tensor --> numpy 矩阵类型的数据
    from matplotlib import pyplot as plt
    
    figure = plt.figure()
    for i in range(9):
        img, label = training_data[i + 59000]  # 提取第59000张图片
    
        figure.add_subplot(3, 3, i + 1)  # 图像窗口中创建多个小窗口,小窗口用于显示图片
        plt.title(label)
        plt.axis("off")  # 关闭坐标
        plt.imshow(img.squeeze(), cmap="gray")
        a = img.squeeze()  # img.squeeze()从张量img中去掉维度为1的(降维)
    plt.show()
    
  • 展示的手写数字图片如下:
    在这里插入图片描述

  • 下面链接是此数据集的官方解释(纯英文,可在浏览器中翻译成中文):

二、卷积神经网络模型对手写数字识别步骤和完整代码

  • 步骤:

    • 1.下载训练集和测试集,并展示部分手写数字图片
    • 2.运用 DataLoader 数据包管理工具,在训练集和测试集数据中,将每64张图片打包成一个数据包
    • 3.构建一个卷积神经网络模型类
    • 4.定义训练模型的函数
    • 5.定义测试模型的函数
    • 6.创建交叉熵损失函数对象,并创建一个优化器,用于更行模型中的权重参数,达到优化模型的效果
    • 7.定义模型训练轮数,进行模型训练,并打印出每一轮训练后的损失值,便于观察模型的优化效果
    • 8.传入训练数据,进行模型测试
  • 完整代码:

    import torch
    from torch import nn  # 导入神经网络模块
    from torch.utils.data import DataLoader  # 数据包管理工具,打包数据,
    from torchvision import datasets  # 封装了很多与图像相关的模型,数据集
    from torchvision.transforms import ToTensor  # 数据转换,张量,将其他类型的数据转换为tensor张量
    
    """
    MNIST包含70,000张手写数字图像:60,000张用于训练,10,000张用于测试。
    图像是灰度的,28x28像素的,并且居中的,以减少预处理和加快运行。
    """
    """ 下载训练数据集 (包含训练数据+标签)"""
    training_data = datasets.MNIST(
        root
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值