基于TensorFlow深度学习框架,运用python搭建LeNet-5卷积神经网络模型和mnist手写数字识别数据集,设计一个手写数字识别软件。

本文介绍了一个使用TensorFlow深度学习框架和LeNet-5卷积神经网络实现的手写数字识别软件。通过读取mnist数据集,构建模型并训练,最终实现手写数字的识别。软件还包括用户登录、模型训练参数设置等功能,允许用户自定义模型并保存识别结果。
摘要由CSDN通过智能技术生成

本软件是基于TensorFlow深度学习框架,运用LeNet-5卷积神经网络模型和mnist手写数字识别数据集所设计的手写数字识别软件。
具体实现如下:
1.读入数据:运用TensorFlow深度学习框架,下载并读入mnist手写数字识别数据集。
2.构建模型:用神经元构建神经网络,定义神经网络的权重和偏置项来进行前向计算,并使用Softmax Regression模型来进行Softmax分类,即可得到每一类图像特征所对应数字的概率。
3.训练模型:设置训练参数(训练轮次、训练样本量、训练批次、显示力度、学习率等),定义交叉熵损失函数,选择梯度下降优化器来使得损失最小化,用argmax函数找出概率最大的对应数字,并计算准确率。
4.评估模型:用训练集和验证集完整训练后,在测试集上评估模型的准确率。
5.应用模型:模型构建完成后,应用模型,用鼠标写入数字进行识别。
6.用户界面:普通用户可注册账号、输入账号密码登录。管理员用户可以对用户账号进行增、删、改操作。登录后可设置训练参数来训练自己的模型,训练完成后即可应用自己的模型进行手写数字识别。每个账号训练的模型、写入的图像和识别的结果都可保存在自己的账号上(本地的文件里)。

一、研究背景、概况及意义
手写数字识别是利用机器或计算机自动辨认手写体阿拉伯数字的一种技术,是光学字符识别技术的一个分支。该技术可以应用到邮政编码、财务报表、税务系统数据统计、 银行票据等手写数据自动识别录入中。由于不同的人所写的字迹都不相同,对大量的手写体数字实现完全正确地识别不是一件简单的事情。随着全球信息化的飞速发展、数据量的急速增长以及对自动化程度要求的不断提高,手写体数字识别的应用需求急迫。因此,研究一种准确又高效的手写数字识别方法有着非常重大的现实意义和十分广阔的应用前景。
手写数字识别中以往流行的识别方法有三种:隐马尔科夫模型(HMM)、支持向量机(SVM)、人工神经网络(ANN),对复杂分类问题的数学函数表示能力以及网络的泛化能力有限,往往不能达到高识别精度的要求。随着深度学习(deep learning,DL)的不断发展和科学研究的不断深入,卷积神经网络(Convolutional Neural Network,CNN)的出现为解决这个问题提供了可能。它最初由美国学者Yann LeCun等提出,是一种层与层之间局部连接的深度神经网络,最常用于分析视觉图像,受生物自然视觉认知机制(动物视觉皮层细胞负责检测光学信号)启发而来,是一种特殊的多层前馈神经网络。它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。一个卷积神经网络通常包括输入输出层和多个隐藏层,隐藏层通常包括卷积层和RELU层(即激活函数)、池化层、全连接层和归一化层等。作为深度学习中最成功的模型之一,卷积神经网络已成为当前图像识别领域的研究热点,使得手写数字识别在识别率和识别速度上,都上了一个新台阶。
作为最早的卷积神经网络模型之一,也是最近大量神经网络架构的起点,LeNet-5通过巧妙的设计,利用卷积、参数共享、池化等操作提取特征,避免了大量的计算成本,最后再使用全连接神经网络进行分类识别。LeNet-5共有7层(不包括输入层),主要由卷积层、下采样层、全连接层以及输出层组成。输入层采用的是3232像素大小的蹄片,卷积层采用的是55大小的卷积核,且卷积核每次滑动一个像素。下采样层将卷积层2828或1010的特征图谱以22为单位的下采样得到1414或55的图。最后全连接层将所有的节点连接起来传给输出层。输出层共有10个节点,分别代表数字0到9。因此用LeNet-5模型搭建手写数字识别模型是非常直观且有重要意义的。
二、研究主要内容
本软件是基于TensorFlow深度学习框架,运用LeNet-5卷积神经网络模型和mnist手写数字识别数据集所设计的手写数字识别软件。LeNet-5共有7层(不包括输入层),主要由卷积层、下采样层、全连接层以及输出层组成。输入层采用的是32
32像素大小的蹄片,卷积层采用的是55大小的卷积核,且卷积核每次滑动一个像素。下采样层将卷积层2828或1010的特征图谱以22为单位的下采样得到1414或55的图。最后全连接层将所有的节点连接起来传给输出层。输出层共有10个节点,分别代表数字0到9。具体实现如下:
1.读入数据:
运用TensorFlow深度学习框架,下载并读入mnist手写数字识别数据集。
2.构建模型:
用神经元构建神经网络,定义神经网络的权重和偏置项来进行前向计算,并使用Softmax Regression模型来进行Softmax分类,即可得到每一类图像特征所对应数字的概率。
3.训练模型:
设置训练参数(训练轮次、训练样本量、训练批次、显示力度、学习率等),定义交叉熵损失函数,选择梯度下降优化器来使得损失最小化,用argmax函数找出概率最大的对应数字,并计算准确率。
4.评估模型:
用训练集和验证集完整训练后,在测试集上评估模型的准确率。
5.应用模型:
模型构建完成后,应用模型,用鼠标写入数字进行识别。
6.用户界面:
普通用户可注册账号、输入账号密码登录。管理员用户可以对用户账号进行增、删、改操作。登录后可设置训练参数来训练自己的模型,训练完成后即可应用自己的模型进行手写数字识别。每个账号训练的模型、写入的图像和识别的结果都可保存在自己的账号上(本地的文件里)。
三、研究步骤、方法及措施
1.课题调研:
查阅与课题相关的书籍、文献资料、网络资源等,对课题的发展方向、研究意义和所需要的技术、资源进行全面了解,对课题实现有较为明确的预期和计划。由于本科期间对深度学习、神经网络等方面的知识了解较少,需要查阅并深入学习相关文献知识,从而打下坚实的基础。
2.技术学习:
需要熟悉python与TensorFlow编程,了解深度学习与LeNet-5卷积神经网络,掌握相关算法与函数。Python与TensorFlow也并未学习过,但Python和TensorFlow在机器学习、深度学习或其他计算领域都具有广泛运用,因而借此机会可以掌握新的编程语言和架构。
3.方法设计:
根据相关资料和预期计划,对软件涉及的方法进行完整的设计,确保软件在理论上是可行的。
4.初步编码:
在已有需求分析、功能设计的基础上,运用python、TensorFlow编程等相应技术实现论文中所涉及的方法,测试其在实际中是可行的。数字识别功能初步完成后,对用户界面进行设计和完成。
5.改进和维护:
根据实际编码和方法理论中的差异,以及测试结果的精度和预期的差距,通过改进运用函数或调整测试参数等方式,对软件进行优化。
参考文献:
参考文献
[1] Lécun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11):2278-2324.
[2] LECUN Y, BENGIO Y, HINTON G, et al. Deep Learning[J]. Nature, 2015, 521(7533):436-444.
[3] TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems[J]. 2016.
[4] 杜敏, 赵全友. 基于动态权值集成的手写数字识别方法[J]. 计算机工程与应用, 2010, 046(027):182-184.
[5] 刘炀, 汤传玲, 王静, et al. 一种基于BP神经网络的数字识别新方法[J]. 微型机与应用, 2012.
[6] El-Sawy A , El-Bakry H , Loey M . CNN for Handwritten Arabic Digits Recognition Based on LeNet-5[J]. 2016.
[7] 吕国豪, 罗四维, 黄雅平, et al. 基于卷积神经网络的正则化方法[J]. 计算机研究与发展, 2014, 51(009):1891-1900.
[8] 尹宝才,王文通,王立春.深度学习研究综述[J].北京工业大学学报,2015:54-65.
[9] Fabien Lauer, Ching Y. Suen, Gérard Bloch.A trainable feature extractor for handwritten digit recognition[J].Pattern Recognition,2007:1816-1824.
[10] 赵志宏,杨绍普,马增强.基于卷积神经网络LeNet-5的车牌字符识别研究[J].系统仿真学报,2010(03):94-97.

实现的思路和方法:
(1)项目简介、理论意义与价值
手写数字识别是利用机器或计算机自动辨认手写体阿拉伯数字的一种技术,是光学字符识别技术的一个分支。该技术可以应用到邮政编码、财务报表、税务系统数据统计、银行票据等手写数据自动识别录入中。由于不同的人所写的字迹都不相同,对大量的手写体数字实现完全正确地识别不是一件简单的事情。随着全球信息化的飞速发展、数据量的急速增长以及对自动化程度要求的不断提高,手写体数字识别的应用需求急迫。因此,研究一种准确又高效的手写数字识别方法有着非常重大的现实意义和十分广阔的应用前景。
手写数字识别中以往流行的识别方法有三种:隐马尔科夫模型(HMM)、支持向量机(SVM)、人工神经网络(ANN),对复杂分类问题的数学函数表示能力以及网络的泛化能力有限,往往不能达到高识别精度的要求。随着深度学习(deep learning,DL)的不断发展和科学研究的不断深入,卷积神经网络(Convolutional Neural Network,CNN)的出现为解决这个问题提供了可能。它最初由美国学者Yann LeCun等提出࿰

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是基于TensorFlow深度学习框架,使用Python搭建LeNet-5卷神经网络模型并使用MNIST数字识别数据集进行训练和测试的代码: ``` # 导入所需要的库 import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers import numpy as np import matplotlib.pyplot as plt # 加载MNIST数据集 (x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data() # 将像素值归一化到[0, 1]之间 x_train = x_train.astype('float32') / 255 x_test = x_test.astype('float32') / 255 # 将标签转换成one-hot编码 y_train = keras.utils.to_categorical(y_train, 10) y_test = keras.utils.to_categorical(y_test, 10) # 定义LeNet-5模型 model = keras.Sequential([ layers.Conv2D(filters=6, kernel_size=(5, 5), activation='relu', input_shape=(28, 28, 1)), layers.MaxPooling2D(pool_size=(2, 2)), layers.Conv2D(filters=16, kernel_size=(5, 5), activation='relu'), layers.MaxPooling2D(pool_size=(2, 2)), layers.Flatten(), layers.Dense(units=120, activation='relu'), layers.Dense(units=84, activation='relu'), layers.Dense(units=10, activation='softmax') ]) # 编译模型 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # 训练模型 history = model.fit(x_train.reshape(-1, 28, 28, 1), y_train, batch_size=128, epochs=20, validation_split=0.2) # 评估模型 score = model.evaluate(x_test.reshape(-1, 28, 28, 1), y_test, verbose=0) print('Test loss:', score[0]) print('Test accuracy:', score[1]) # 绘制训练曲线 acc = history.history['accuracy'] val_acc = history.history['val_accuracy'] loss = history.history['loss'] val_loss = history.history['val_loss'] epochs = range(1, len(acc) + 1) plt.plot(epochs, acc, 'bo', label='Training acc') plt.plot(epochs, val_acc, 'b', label='Validation acc') plt.title('Training and validation accuracy') plt.legend() plt.figure() plt.plot(epochs, loss, 'bo', label='Training loss') plt.plot(epochs, val_loss, 'b', label='Validation loss') plt.title('Training and validation loss') plt.legend() plt.show() # 使用模型进行预测 predictions = model.predict(x_test.reshape(-1, 28, 28, 1)) for i in range(10): print('Prediction:', np.argmax(predictions[i])) print('True label:', np.argmax(y_test[i])) plt.imshow(x_test[i], cmap='gray') plt.show() ``` 运行以上代码,将会得到一个基于LeNet-5模型数字识别软件。该软件可以通过图形界面或命令行方式输入数字图片,自动识别数字并显示在界面上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值