深度学习:TensorFlow实现CNN手写字识别

一、MNIST 手写数字介绍

MNIST 手写数字识别在深度学习发展历程中占据着重要地位,它不仅是学习卷积神经网络(CNN)等深度学习模型的绝佳切入点,也为众多复杂图像识别任务奠定了理论与实践基础。

1、MNIST 数据集

MNIST 数据集被誉为深度学习领域的 “Hello World”,由纽约大学柯伦实验室整理而成。它包含 60,000 张训练图像、10,000 张测试图像,每张图像均为 28×28 像素的灰度手写数字图片,涵盖数字 0 - 9 共 10 个类别。这些图像经过了归一化处理,像素值范围在 0 到 255 之间,且数字被居中放置在图像内,以减少额外干扰因素。数据集还附带对应的标签,明确标注了每张图像所代表的数字,方便模型训练和评估。​

MNIST 数据集具有高度标准化和易获取性的特点,其规模适中,既能让初学者快速上手实践,又能为复杂模型提供一定的挑战性。许多新提出的深度学习算法和模型,都会先在 MNIST 数据集上进行初步验证,测试模型的基本性能和泛化能力 。

2、MNIST 经典模型构建​

(一)全连接神经网络​

早期,全连接神经网络(FCN)是处理 MNIST 手写数字识别的常用方法。将 28×28 的图像展平为 784 维的向量后,输入到全连接层。通过多个全连接层的层层计算,对输入特征进行不断整合和变换,最终输出 10 个神经元的结果,分别对应 0 - 9 这 10 个数字类别的预测得分,再经过 Softmax 函数将得分转换为概率,选取概率最大的类别作为预测结果。不过,全连接神经网络由于参数众多,容易出现过拟合问题,且计算效率相对较低。​

(二)卷积神经网络(CNN)​

随着深度学习发展,CNN 逐渐成为 MNIST 手写数字识别的主流模型。CNN 利用卷积层和池化层进行特征提取和降维,有效减少了参数数量,同时保留了图像的空间结构信息。例如,在一个简单的 CNN 模型中,通常会包含 2 - 3 个卷积层,每个卷积层使用不同数量和尺寸的卷积核提取边缘、曲线等基础特征;卷积层之后搭配池化层,降低特征图维度,减少计算量;最后通过展平层将多维特征图转换为一维向量,输入全连接层进行分类。相比全连接神经网络,CNN 在 MNIST 数据集上不仅训练速度更快,识别准确率也大幅提升,通常可以达到 99% 以上。

3、MNIST 训练与评估

在 MNIST 手写数字识别模型训练过程中,常用的损失函数是交叉熵损失函数,它能够衡量预测概率分布与真实标签分布之间的差异,引导模型不断调整参数,使预测结果更接近真实值。优化器一般选用随机梯度下降(SGD)及其变种,如 Adagrad、Adam 等,它们可以根据不同参数的梯度情况,自适应地调整学习率,加快模型的收敛速度。​

模型训练完成后,需要使用测试集对其性能进行评估。除了准确率(Accuracy)这一最直观的指标外,还会计算精确率(Precision)、召回率(Recall)和 F1 值等指标,从不同角度评估模型在各个类别上的识别效果。例如,精确率反映了模型预测为某一类别的样本中,真正属于该类别的比例;召回率表示实际属于某一类别的样本中,被正确预测出来的比例。通过这些指标的综合分析,可以更全面地了解模型的优势与不足,进而进行针对性优化。

4、MNIST 拓展应用

MNIST 手写数字识别的研究成果不仅局限于数字分类本身,还为其他领域提供了宝贵经验。其背后的技术原理和模型结构,经过适当调整和优化,可以应用于其他图像识别任务,如字母识别、验证码识别等。此外,MNIST 数据集也常被用于教学和科研,帮助初学者理解深度学习的基本概念和流程,助力科研人员验证新算法和新模型的有效性。同时,围绕 MNIST 数据集开展的竞赛和研究,不断推动着图像识别技术向更高精度和更强泛化能力的方向发展 。

二、基于TensorFlow框架MNIST 手写数字识别

1、项目简介

案例名称:卷积神经网络CNN实现手写字MNIST图片识别

MNIST手写字识别是一个经典的机器学习任务,旨在通过卷积神经网络(CNN)对28x28像素的灰度手写数字图像进行分类。该数据集包含70,000张图片,分为60,000张训练图片和10,000张测试图片,每张图片代表一个0-9的手写数字。

本项目的目标是构建一个高精度的卷积神经网络模型,能够准确地识别手写数字,并且在测试集上达到较高的准确率。此外,项目还将探索如何优化模型结构、调整超参数以提高性能。

MNIST 数据集来源于 NIST(美国国家标准与技术研究院)的手写字符数据库。 它由 Yann LeCun、Corinna Cortes 和 Christopher J.C. Burges 于 1998 年整理并发布。

【1】MNIST 数据集
   - 样本数量:包含 70,000 张灰度图像,分为两个部分:
     --  训练集:60,000 张图像
     --  测试集:10,000 张图像

   - 图像尺寸:每张图像大小为 28x28 像素。

   - 类别:10 个类别(0 到 9 的手写数字)。

【2】格式
  - 每个图像是一个 28x28 的矩阵,像素值范围为 0 到 255,表示灰度值(0 表示黑  色,255 表示白色)。

  - 标签是单个整数(0 到 9),表示图像中的数字。

【3】数据集特点

 标准化:
   - 图像已经经过预处理,背景被归一化为纯黑色,手写数字居中对齐。
   - 这使得数据集相对简单且容易处理,适合初学者和基准测试。

 多样性:
   - 尽管数据集中的图像都是手写数字,但它们来自不同的书写者,具有不同的风格和笔迹,增加了数据集的多样性。

 平衡性:
   - 每个类别的样本数量大致相同,避免了类别不平衡的问题。

易于获取和使用:
   - MNIST 数据集可以通过多种方式轻松获取,例如通过 TensorFlow、PyTorch、scikit-learn 等库直接加载。

2、用到的技术和工具

开发工具:Anaconda Jupyter Notebook

深度学习框架:TensorFlow、Keras

Python工具包:Numpy、matplotlib

3、主要功能

(1) 数据预处理
   - 加载MNIST数据集。
   - 对数据进行归一化处理,将像素值从0-255缩放到0-1之间。
   - 将标签转换为独热编码(one-hot encoding)。

(2) 模型构建
   - 构建卷积神经网络模型,包括卷积层、池化层、全连接层等。
   - 使用适当的激活函数(如ReLU)和损失函数(如交叉熵)。
   - 添加正则化技术(如Dropout)以防止过拟合。

(3)  模型训练
   
   - 使用Adam优化器或其他合适的优化算法进行模型训练。
   - 设置批量大小(batch size)、迭代次数(epochs)等超参数。
   - 在训练过程中监控模型的损失和准确率。

(4) 模型评估
   
   - 在测试集上评估模型的性能,计算准确率、精确率、召回率等指标。
   - 可视化混淆矩阵,分析模型的分类错误情况。

(5) 模型优化
   
   - 调整网络结构,如增加或减少卷积层、池化层的数量。
   - 调整超参数,如学习率、批量大小、迭代次数等。
   - 使用数据增强技术(如旋转、平移)来扩充训练数据。

4、实验结果展示

Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz 11490434/11490434 ━━━━━━━━━━━━━━━━━━━━ 9s 1us/step Epoch 1/5 
D:\mywork\Anaconda2024\Lib\site-packages\keras\src\layers\convolutional\base_conv.py:107: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead. super().__init__(activity_regularizer=activity_regularizer, **kwargs) 
750/750 ━━━━━━━━━━━━━━━━━━━━ 11s 12ms/step - accuracy: 0.8636 - loss: 0.4441 - val_accuracy: 0.9808 - val_loss: 0.0663 Epoch 2/5 750/750 ━━━━━━━━━━━━━━━━━━━━ 9s 12ms/step - accuracy: 0.9802 - loss: 0.0606 - val_accuracy: 0.9821 - val_loss: 0.0620 Epoch 3/5 750/750 ━━━━━━━━━━━━━━━━━━━━ 10s 13ms/step - accuracy: 0.9886 - loss: 0.0370 - val_accuracy: 0.9876 - val_loss: 0.0411 Epoch 4/5 750/750 ━━━━━━━━━━━━━━━━━━━━ 10s 13ms/step - accuracy: 0.9911 - loss: 0.0263 - val_accuracy: 0.9878 - val_loss: 0.0427 Epoch 5/5 750/750 ━━━━━━━━━━━━━━━━━━━━ 10s 13ms/step - accuracy: 0.9928 - loss: 0.0213 - val_accuracy: 0.9890 - val

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数字化与智能化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值