基于卷积神经网络模型的手写数字识别

基于卷积神经网络模型的手写数字识别

  • 一. 前言
  • 二. 设计目的及任务描述
    • 2.1 设计目的
    • 2.2 设计任务
  • 三. 神经网络模型
    • 3.1 卷积神经网络模型方案
    • 3.2 卷积神经网络模型训练过程
    • 3.3 卷积神经网络模型测试
  • 四. 程序设计

一. 前言

手写数字识别要求利用MNIST数据集里的70000张手写体数字的图像,建立神经网络模型,进行0到9的分类,并能够对其他来源的图片进行识别,识别准确率大于97%。图片示例如下。
alt

图1-1 mnist数据集图片示例

该设计要求学生基于TensorFlow深度学习平台,利用自动下载的MNIST数据集,建立全连接或者CNN神经网络模型,对MNIST或者其他图片中的数字进行正确识别。同时,在数据获取、处理和分析过程中考虑数据安全、技术经济、工程伦理、行业规范等要素。

通过该题目的训练,使学生对深度学习技术有一定的了解,掌握深度学习模型建立、训练、测试和调优的过程,理解监督学习、数据处理、神经网络、卷积计算等概念并通过实例进行实践,学习TensorFlow并搭建深度学习平台,加深学生对深度学习技术的理解和实际引用,并能够利用深度学习方法解决实际问题。

二. 设计目的及任务描述

2.1 设计目的

深入学习TensorFlow深度学习平台,通过构建全连接神经网络和卷积神经网络的手写数字识别模型,实现对MNIST数据集中的数字0到9的分类,并具备对其他来源的图片进行准确识别的能力,要求识别准确率大于97%。这一设计旨在深入理解深度学习技术,并掌握模型的建立、训练、测试和调优的全过程。

首先,进行文献资料查阅,至少阅读5篇相关文献,以确保对深度学习领域的最新进展有所了解。通过文献的学习,将为设计过程提供前沿的理论支持,在实践中融入最新的研究成果。

学习TensorFlow深度学习平台的搭建是课程设计的第二步,这将提供一个强大而灵活的工具,用以实现神经网络的建模和训练。通过掌握TensorFlow,学生将具备在深度学习领域进行实际工作的基本能力。

建立卷积神经网络(CNN),理解卷积运算的原理和图像特征提取的过程。通过建立卷积神经网络的手写数字识别模型,深刻体会卷积计算和最大池化运算对图像特征提取的重要性。学习率、衰减率等参数的调整将是设计中的一个重要环节,通过调优模型,探索不同参数组合对模型性能的影响,并提高识别准确率。

通过这个课程设计,不仅获得深度学习技术的实际应用经验,还将培养文献查阅、团队协作、数据伦理等方面的能力,为将来深入科研或产业实践打下坚实基础。

2.2 设计任务

  1. 查阅文献资料,一般在5篇以上;
  2. 学习TensorFlow深度学习平台的搭建。
  3. 学习卷积神经网络,理解卷积运算原理,建立卷积网络的手写数字识别模型,并进行模型训练、测试和调优。
  4. 理解卷积计算后的最大池化运算,学习图像特征提取的原理。
  5. 理解学习率、衰减率等参数的作用。
  6. 理解监督学习的过程。
  7. 学习损失率函数构建方法。
  8. 经过模型调优,理解模型中各参数的作用以及影响模型准确率的因素。
  9. 模型识别准确率大于97%。
  10. 撰写课程设计说明书,须达到以下要求:
    (1) 陈述设计题目、设计任务;
    (2) 描述TensorFlow深度学习平台的搭建过程;
    (3) 写出卷积神经网络模型方案;
    (4) 记录卷积神经网络模型训练过程;
    (5) 记录卷积神经网络模型测试准确率;
    (6) 陈述模型调优过程,包括调优过程中遇到的主要问题,是如何解决的;对模型设计和编码的回顾、反思和体会等,与同学对问题的讨论、分析、改进设想以及收获等。同时,分析数据处理及分析过程中面临的数据安全、工程伦理等问题。

三. 神经网络模型

3.1 卷积神经网络模型方案

卷积神经网络(CNN)在计算机视觉领域已成为极其成功的深度学习模型典范,本模型设计即采纳了经典的LeNet-5架构风格。

在开始模型训练之前,首先加载MNIST手写数字数据集,并对数据进行了细致的预处理。所有图像被统一调整为28x28像素大小,以确保输入的一致性。同时,为了提升模型的训练稳定性和效果,对图像数据进行归一化,将像素值限定在[0, 1]的范围内。对于标签数据,采用了独热编码方式,以便于多分类任务的处理。

在模型编译阶段,选择交叉熵损失函数来衡量预测与真实标签之间的差异,为了进一步优化训练过程,引入了学习率衰减策略,使模型能够在训练的不同阶段灵活地调整学习步长。

该神经网络模型结构严谨,功能明确。它起始于卷积层,其中第一层利用6个5x5大小的卷积核来捕捉图像的初级特征,并通过ReLU激活函数为网络引入非线性特性。最大池化层以2x2的窗口对特征图进行下采样,有效降低了数据的空间维度,同时保留了重要特征。第二层卷积层进一步扩展了特征提取的深度,使用了16个5x5的卷积核,并再次应用ReLU激活函数。这一层级的特征在经过第二个最大池化层的下采样后,被进一步抽象和压缩。

在展平层,模型将经过卷积和池化处理的二维特征图转换为一维特征向量,为后续的全连接层做好了数据准备。全连接层作为模型的决策核心,第一层包含120个神经元,第二层包含84个神经元,均使用ReLU激活函数以增强网络的表达能力。

输出层配备了10个神经元,每个神经元对应着数字0到9的一个类别。通过Softmax激活函数,模型能够输出各个类别的概率分布,从而实现多类别分类任务。整个模型的设计巧妙地结合了卷积、池化和全连接操作,实现了从原始图像到最终分类结果的精确映射。

3.2 卷积神经网络模型训练过程

通过对训练集进行多轮迭代,模型不断学习特征并调整权重,以最小化损失函数。在训练过程中,监视模型在验证集上的性能,以及损失和准确率的变化。
在这里插入图片描述

图 3-1 卷积神经网络模型_训练结果
如图3-1所示,通过5次训练模型的准确度达到99%。

3.3 卷积神经网络模型测试

使用 Keras 模型的 evaluate 方法在测试集上进行评估。
在这里插入图片描述

图 3-2 卷积神经网络模型_测试结果
经测试,如图3-2所示,模型准确度为99.19%。

四. 程序设计

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPooling2D
from tensorflow.keras.datasets import mnist
from IPython import get_ipython
from tensorflow.keras.optimizers import Adam


def load_and_preprocess_data():
    # 加载并预处理MNIST数据集
    (x_train, y_train), (x_test, y_test) = mnist.load_data()

    # 重塑和归一化数据
    x_train = x_train.reshape((x_train.shape[0], 28, 28, 1)) / 255.0
    x_test = x_test.reshape((x_test.shape[0], 28, 28, 1)) / 255.0

    # 对标签进行多分类编码
    num_categories = 10
    y_train = tf.keras.utils.to_categorical(y_train, num_categories)
    y_test = tf.keras.utils.to_categorical(y_test, num_categories)

    return x_train, y_train, x_test, y_test

def build_model_Convolutional():#*
    # 构建卷积神经网络模型
    model = Sequential()
    model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
    model.add(MaxPooling2D((2, 2)))
    model.add(Conv2D(64, (3, 3), activation='relu'))
    model.add(MaxPooling2D((2, 2)))
    model.add(Flatten())
    model.add(Dense(512, activation='relu'))
    model.add(Dense(10, activation='softmax'))
    model.summary()

    return model

def compile_and_train_model(model, x_train, y_train, x_test, y_test):
    # 自定义优化器,设置学习率和衰减率
    custom_optimizer = Adam(learning_rate=0.001, decay=1e-6)
    # 编译并训练模型
    model.compile(optimizer='Adam', loss='categorical_crossentropy', metrics=['accuracy'])

    history = model.fit(x_train, y_train, epochs=10, verbose=1, validation_data=(x_test, y_test))

    return history

def shutdown_ipython_kernel():
    # 清理显存
    ipython = get_ipython()
    if ipython:
        ipython.kernel.shutdown()

if __name__ == "__main__":
    # 加载并预处理数据
    x_train, y_train, x_test, y_test = load_and_preprocess_data()

    # 构建神经网络模型
    model = build_model_Convolutional()

    # 编译并训练模型
    history = compile_and_train_model(model, x_train, y_train, x_test, y_test)

    # 保存训练模型
    model.save("mnist_cnn_model.h5")
    print("Model saved successfully.")

    # 清理显存
    shutdown_ipython_kernel()


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/386119.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构——lesson2线性表和顺序表

目录 前言 一、顺序表是什么? 1. 静态顺序表:使用定长数组存储元素 2. 动态顺序表:使用动态开辟的数组存储。 二、接口实现 1.动态顺序表存储 2.基本增删查改接口 (1)初始化顺序表 (2)顺序表摧毁 (3)检查空间 (4)顺序表打印 (5)顺…

Elasticsearch:倒数排序融合 - Reciprocal rank fusion (RRF)

注意:RRF 在 Elastic Stack 8.8 中正式提供。 倒数排序融合(RRF)是一种将具有不同相关性指标的多个结果集组合成单个结果集的方法。 RRF 无需调优,不同的相关性指标也不必相互关联即可获得高质量的结果。该方法的优势在于不利用相…

VBA技术资料MF118:在多个工作表中插入页眉和页脚

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…

如何在PDF 文件中删除页面?

查看不同的工具以及解释如何在 Windows、Android、macOS 和 iOS 上从 PDF 删除页面的步骤: PDF 是最难处理的文件格式之一。曾经有一段时间,除了阅读之外,无法用 PDF 做任何事情。但是今天,有许多应用程序和工具可以让您用它们做…

片上网络NoC(3)——拓扑指标

目录 一、概述 二、指标 2.1 与网络流量无关的指标 2.1.1 度(degree) 2.1.2 对分带宽(bisection bandwidth) 2.1.3 网络直径(diameter) 2.2 与网络流量相关的指标 2.2.1 跳数(hop coun…

【复现】Supabase后端服务 SQL注入漏洞_48

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一: 四.修复建议: 五. 搜索语法: 六.免责声明 一.概述 Supabase是什么 Supabase将自己定位为Firebase的开源替代品,提供了一套工具来帮助开发者构建web或移动应用程序。 Sup…

LeetCode、208. 实现 Trie (前缀树)【中等,自定义数据结构】

文章目录 前言LeetCode、208. 实现 Trie (前缀树)【中等,自定义数据结构】题目链接与分类思路 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领…

车载诊断协议DoIP系列 —— OSI模型DoIP参考

车载诊断协议DoIP系列 —— OSI模型DoIP参考 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝完再…

Vue源码系列讲解——模板编译篇【三】(HTML解析器)

目录 1. 前言 2. HTML解析器内部运行流程 3. 如何解析不同的内容 3.1 解析HTML注释 3.2 解析条件注释 3.3 解析DOCTYPE 3.4 解析开始标签 3.5 解析结束标签 3.6 解析文本 4. 如何保证AST节点层级关系 5. 回归源码 5.1 HTML解析器源码 5.2 parseEndTag函数源码 6. …

使用MICE进行缺失值的填充处理

在我们进行机器学习时,处理缺失数据是非常重要的,因为缺失数据可能会导致分析结果不准确,严重时甚至可能产生偏差。处理缺失数据是保证数据分析准确性和可靠性的重要步骤,有助于确保分析结果的可信度和可解释性。 在本文中&#…

Linux_环境变量_命令行参数

一.环境变量 在Linux中自己写的程序必须要带路径才能运行,相对路径或是绝对路径,但是像ls pwd这样的程序,不带路径也能运行。当你想要运行一个程序时: 如果带有路径的话,则直接将对应路径的程序加载进内存&#xff0…

LeetCode、1268. 搜索推荐系统【中等,前缀树+优先队列、排序+前缀匹配】

文章目录 前言LeetCode、1268. 搜索推荐系统【中等,前缀树优先队列、排序前缀匹配】题目类型及分类思路API调用(排序前缀匹配)前缀树优先队列 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创…

内网穿透 | 推荐两个免费的内网穿透工具

目录 1、简介 2、Ngrok 2.1、下载安装 2.2、运行 2.3、固定域名 2.4、配置多服务 3、cpolar 3.1、下载安装 3.2、运行 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应…

2024 年 5 款适用于免费 iPhone 数据恢复的工具软件

搜索一下,你会发现许多付费或免费的iPhone数据恢复工具声称它们可以帮助你以很高的成功率找回所有丢失的数据。然而,这正是问题所在。真的很难做出选择。为了进一步帮助您解决数据丢失问题,我们在此列出了 5 款最好的免费 iPhone 恢复软件供您…

[Doris] Doris的安装和部署 (二)

文章目录 1.安装要求1.1 Linux操作系统要求1.2 软件需求1.3 注意事项1.4 内部端口 2.集群部署2.1 操作系统安装要求2.2 下载安装包2.3 解压2.4 配置FE2.5 配置BE2.6 添加BE2.7 FE 扩容和缩容2.8 Doris 集群群起脚本 3.图形化 1.安装要求 1.1 Linux操作系统要求 1.2 软件需求 1…

Hive的小文件问题

目录 一、小文件产生的原因 二、小文件的危害 三、小文件的解决方案 3.1 小文件的预防 3.1.1 减少Map数量 3.1.2 减少Reduce的数量 3.2 已存在的小文件合并 3.2.1 方式一:insert overwrite (推荐) 3.2.2 方式二:concatenate 3.2.3 方式三&#xff…

[Python] 如何用import导入模块

本篇博客来记以下关于import导入模块的笔记~ 可莉将这篇博客收录在了:《Python》 可莉推荐的优质博主主页:Kevin ’ s blog 我们在Python中可以使用import从标准库中导入一天模块,模块相当于是一个 .py 文件,我们导入后调用相当于…

腾讯云4核8G服务器多少钱?646元一年零3个月

腾讯云服务器4核8G配置优惠价格表,轻量应用服务器和CVM云服务器均有活动,云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元,5年6490.44元,轻量应用服务器4核8G12M带宽一年446元、529元15个月,腾讯云百科txybk.com分…

pythondjangomysql苏州一日游之可视化分析69216-计算机毕业设计项目选题推荐(附源码)

摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对旅游服务等问题,对旅游服务进行…

【动态规划】【中位数】【C++算法】1478. 安排邮筒

# 作者推荐 【深度优先搜索】【树】【图论】2973. 树中每个节点放置的金币数目 本文涉及知识点 动态规划汇总 LeetCode1478. 安排邮筒 给你一个房屋数组houses 和一个整数 k ,其中 houses[i] 是第 i 栋房子在一条街上的位置,现需要在这条街上安排 k…