深度学习项目 -7-使用 Python 的手写数字识别

news2024/11/28 15:59:14

 一、前言

该文章仅作为个人学习使用

二、正文

项目源代码:深度学习项目 - 使用 Python 进行手写数字识别 - DataFlair (data-flair.training)

数据集:​​​​​​​https://drive.google.com/open?id=1hJiOlxctFH3uL2yTqXU_1f6c0zLr8V_K

Python 深度学习项目

为了让机器更智能,开发人员正在深入研究机器学习和深度学习技术。一个人通过一次又一次地练习和重复任务来学习执行任务,以便记住如何执行任务。然后他大脑中的神经元自动触发,它们可以快速执行他们学到的任务。深度学习也与此非常相似。它使用不同类型的神经网络架构来解决不同类型的问题。例如,物体识别、图像和声音分类、物体检测、图像分割等。

什么是手写数字识别?

手写数字识别是计算机识别人类手写数字的能力。对于机器来说,这是一项艰巨的任务,因为手写数字并不完美,可以制作成许多不同的口味。手写数字识别是这个问题的解决方案,它使用数字的图像并识别图像中存在的数字。

关于 Python 深度学习项目

在本文中,我们将使用 MNIST 数据集实现一个手写数字识别应用程序。我们将使用一种特殊类型的深度神经网络,即卷积神经网络。最后,我们将构建一个 GUI,您可以在其中绘制数字并立即识别它。

先决条件

有趣的 Python 项目需要您具备 Python 编程的基础知识、使用 Keras 库进行深度学习以及用于构建 GUI 的 Tkinter 库。

使用以下命令安装此项目所需的库:

pip 安装 numpy、tensorflow、keras、pillow、

MNIST数据集

这可能是机器学习和深度学习爱好者中最受欢迎的数据集之一。MNIST 数据集包含 60,000 张从 0 到 9 的手写数字训练图像和 10,000 张用于测试的图像。因此,MNIST 数据集有 10 个不同的类。手写数字图像表示为 28×28 矩阵,其中每个单元格都包含灰度像素值。

下载项目的完整源代码

构建基于手写数字识别的Python深度学习项目

以下是实施手写数字识别项目的步骤:

1. 导入库并加载数据集

首先,我们要导入训练模型所需的所有模块。Keras库已经包含了一些数据集,MNIST就是其中之一。因此,我们可以轻松地导入数据集并开始使用它。mnist.load_data() 方法向我们返回训练数据、标签以及测试数据和标签。

导入 Keras
来自Keras。数据集导入 MNIST
来自Keras。模型导入顺序
来自Keras。图层导入 Dense、Dropout、Flatten
来自Keras。图层导入 Conv2D、MaxPooling2D
从 keras 导入后端作为 K
# 数据,在训练集和测试集之间拆分
(x_train, y_trainx_test, y_test = mnist.load_data()
打印x_train.形状,y_train。形状)

2. 预处理数据

图像数据不能直接输入到模型中,因此我们需要执行一些操作并处理数据,以便为我们的神经网络做好准备。训练数据的维度为 (60000,28,28)。CNN 模型将需要一个维度,因此我们将矩阵重塑为 shape (60000,28,28,1)。

x_train = x_train。重塑x_train。形状[0]28281)
x_test = x_test。重塑x_test。形状[0]28281)
input_shape = 28281)
# 将类向量转换为二进制类矩阵
y_train = keras。utilsto_categoricaly_train, num_classes)
y_test = keras。utilsto_categoricaly_test, num_classes)
x_train = x_train。astype'float32')
x_test = x_test。astype'float32')
x_train /= 255
x_test /= 255
print'x_train形状:', x_train.形状)
打印x_train.shape[0]'训练样本')
打印x_test。shape[0]'测试样本')

3. 创建模型

现在,我们将在 Python 数据科学项目中创建 CNN 模型。CNN 模型通常由卷积层和池化层组成。它适用于表示为网格结构的数据,这就是 CNN 在图像分类问题中效果不佳的原因。dropout 层用于停用一些神经元,在训练时,它会减少模型的拟合。然后,我们将使用 Adadelta 优化器编译模型。

batch_size = 128
num_classes = 10
纪元 = 10
model = 顺序()
型。addConv2D32, kernel_size=33,activation='relu',input_shape=input_shape))
型。addConv2D6433, activation='relu'))
型。addMaxPooling2Dpool_size=22)))
型。辍学0.25))
型。添加展平())
型。addDense256, activation='relu'))
型。添加辍学0.5))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss=keras.losses.categorical_crossentropy,optimizer=keras.optimizers.Adadelta(),metrics=['accuracy'])

4. 训练模型

Keras 的 model.fit() 函数将开始模型的训练。它采用训练数据、验证数据、epoch 和批量大小。

训练模型需要一些时间。训练后,我们将权重和模型定义保存在“mnist.h5”文件中。

hist = 模型。fitx_train, y_train,batch_size=batch_size,epochs=epochs,verbose=1,validation_data=x_test, y_test))
print“模型已成功训练”)
型。保存'mnist.h5')
print“将模型另存为 mnist.h5”)

5. 评估模型

我们的数据集中有 10,000 张图像,这些图像将用于评估我们的模型的工作情况。测试数据没有参与数据的训练,因此,它是我们模型的新数据。MNIST数据集平衡性很好,因此我们可以获得大约99%的准确率。

分数 = 模型。evaluatex_test, y_test, verbose=0)
print'测试损失:', score[0])
print'测试精度:', score[1])

6. 创建 GUI 以预测数字

现在对于 GUI,我们创建了一个新文件,在其中我们构建了一个交互式窗口,用于在画布上绘制数字,并且通过一个按钮,我们可以识别数字。Tkinter 库位于 Python 标准库中。我们创建了一个函数 predict_digit(),它将图像作为输入,然后使用经过训练的模型来预测数字。

然后我们创建 App 类,该类负责为我们的应用程序构建 GUI。我们创建一个画布,可以通过捕获鼠标事件来绘制,并使用一个按钮触发 predict_digit() 函数并显示结果。

以下是我们gui_digit_recognizer.py文件的完整代码:

来自Keras。模型导入load_model
从 tkinter 导入*
将 tkinter 导入为 tk
导入 Win32GUI
从 PIL 导入 ImageGrab, 图像
将 numpy 导入为 np
模型 = load_model'mnist.h5')
定义 predict_digitimg
#resize 图像到 28x28 像素
img = img。调整大小((28,28))
#convert RGB 到灰度
img = img。convert'L')
img = np。阵列img)
#reshaping 支持我们的模型输入和归一化
img = img。重塑1,28,28,1 )
img = img/255.0
#predicting 课程
res = 模型。预测([img])[0]
返回 NP。argmaxresmaxres)
Apptk.Tk
def __init__个体经营)
传统知识。Tk__init__自行)
自我。x = 自我。y = 0
# 创建元素
自我。帆布 = TK。Canvasself, width=300, height=300, bg = “白色”, cursor=“cross”)
自我。标签 = TK。Labelself, text=“思考..”, font=“Helvetica”48))
自我。classify_btn = 传统知识。Buttonself, text = “识别”, command = self.classify_handwriting)
自我。button_clear = TK。Buttonself, text = “清除”, command = self.clear_all)
# 网格结构
自我。帆布gridrow=0, column=0, pady=2, sticky=W, )
自我。标签gridrow=0, column=1,pady=2, padx=2)
自我。classify_btn.gridrow=1, column=1, pady=2, padx=2)
自我。button_clear.gridrow=1, column=0, pady=2)
#self.canvas.bind(“<运动>”, self.start_pos)
自我。帆布bind“<B1-Motion>”, 自身。draw_lines)
def clear_all个体经营)
自我。帆布delete“全部”)
def classify_handwriting个体经营)
HWND = 自身。帆布winfo_id() # 获取画布的手柄
矩形 = Win32GUI。GetWindowRectHWND # 获取画布的坐标
im = 图像抓取。抓取矩形)
数字,acc = predict_digitim)
自我。标签configuretext= strdigit+', '+ strintacc*100))+'%')
def draw_linesself, event
自我。x = 事件。
自我。y = 事件。y
r=8
自我。帆布create_oval自。X-R, 自身。Y-R, 自我。x + r, 自我。y + r, fill='黑色')
app = 应用()
主环路()

截图:

三、总结

在本文中,成功地在手写数字识别应用程序上构建了一个 Python 深度学习项目。已经构建并训练了卷积神经网络,该网络对于图像分类目的非常有效。稍后,我们构建 GUI,在画布上绘制一个数字,然后对数字进行分类并显示结果。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AB安全产品详解Guard master Safety Products

AB安全产品详解Guard master Safety Products

程序员面试中的“八股文”:是助力还是阻力?

“八股文”在实际工作中是助力、阻力还是空谈&#xff1f; 作为现在各类大中小企业面试程序员时的必问内容&#xff0c;“八股文”似乎是很重要的存在。但“八股文”是否能在实际工作中发挥它“敲门砖”应有的作用呢&#xff1f;有IT人士不禁发出疑问&#xff1a;程序员面试考…

深入浅出mediasoup—拥塞控制

拥塞控制对于不同网络条件下保证音视频传输质量非常重要。mediasoup 移植了 WebRTC 的 GCC 模块&#xff0c;嵌入到服务器&#xff0c;使得 mediasoup 具备了和 WebRTC 客户端一样的拥塞控制能力。为了使 GCC 能够与 mediasoup 框架良好交互&#xff0c;mediasoup 做了很多适配…

Large Models for Time Series and Spatio-Temporal Data: A Survey and Outlook

基本信息 博客贡献人 谷雨 作者 Ming Jin, Qingsong Wen, et al. 标签 大语言模型、预训练基础模型、大模型、时间序列、时空数据、时态数据 摘要 时态数据&#xff0c;包括时间序列和时空数据&#xff0c;在现实世界的应用中极为广泛。这些数据类型记录了动态系统随时…

2024电赛H题可能用到的代码——自动行驶小车

目录 前言 一、MPU6050零漂处理 二、MPU6050的Yaw&#xff08;180&#xff09;误差处理 三、PID算法&#xff08;增量式位置式&#xff09; 四、灰度传感器&#xff08;以8路为例&#xff09; 1、获取黑线偏差 2、判断ABCD点&#xff08;有无黑线交点&#xff09; 五、总结 前言…

内存原生CRAM技术将会颠覆计算存储的未来?

近期&#xff0c;一项刚刚发布的最新研究表明&#xff0c;一种名为计算随机存取存储器&#xff08;Computational Random-Access Memory, CRAM&#xff09;的新技术能够极大地减少人工智能&#xff08;AI&#xff09;处理所需的能量消耗。这项技术由明尼苏达大学双城分校的一组…

SmartInitializingSingleton和InitializingBean的区别

SmartInitializingSingleton&#xff1a;接口里面就一个方法afterSingletonsInstantiated&#xff0c;它是spring容器将所有bean都初始化完成之后&#xff0c;才会去调用&#xff0c;要求实现它接口的bean必须是单例的。 应用场景&#xff1a;可以在服务启动之后去处理一些逻辑…

红酒与电影:银幕上的醉人瞬间

在光影交织的银幕世界里&#xff0c;红酒不仅是品味生活的象征&#xff0c;更是情感交流的媒介。当定制红酒与电影相遇&#xff0c;它们共同编织出一个个醉人的瞬间&#xff0c;让观众在品味红酒的同时&#xff0c;也沉醉于电影的魅力之中。今天&#xff0c;就让我们一起走进红…

JS小应用:从图床获取的html代码中提取IMG标签并提取图片复制到剪贴板

JS小应用&#xff1a;从图床获取的html代码中提取IMG标签并提取图片复制到剪贴板 问题产生 自己做站长&#xff0c;为了节省银子&#xff0c;难免要用到图床。有的图床可以直接给你URL&#xff0c;这当然是最好的情况&#xff1a; 而有的图床&#xff0c;却禁用了鼠标右键&am…

“论数据分片技术及其应用”写作框架软考高级论文系统架构设计师论文

论文真题 数据分片就是按照一定的规则&#xff0c;将数据集划分成相互独立、正交的数据子集&#xff0c;然后将数据子集分布到不同的节点上。通过设计合理的数据分片规则&#xff0c;可将系统中的数据分布在不同的物理数据库中&#xff0c;达到提升应用系统数据处理速度的目的…

FP分数规划在无线通信中的应用(II)

3. 具体例子 3.1-3.3都只需要用第一章concave-convex方法求解&#xff0c;3.4-3.6需要用到第二章的拉格朗日对偶变换&#xff0c;而且具体解 x \mathbf{x} x时需要对离散变量单独开发算法。 3.1 多小区SISO能量分配 第一个例子是具有一组单天线基站&#xff08;BSs&#xff…

Python面向对象浅析

目录 面向对象基本概念 一、类和对象 类和对象是面向对象骗程的两个核心概念。 在程序开发中&#xff0c;要设计一个类&#xff0c;通常需要满足一下三个要素: self详解&#xff1a; 对象&#xff08;Object&#xff09; 魔法方法&#xff1a; 类里的一些特殊方法 __in…

RK3568笔记四十八:ADC驱动开发测试

若该文为原创文章&#xff0c;转载请注明原文出处。 一、ADC介绍 RK3568集成了一个逐次逼近模数转换器&#xff08;Successive Approximation ADC&#xff09;&#xff0c;通常简称为SAR ADC。 这种转换器能够将连续的模拟信号转换为离散的数字信号&#xff0c;其特点在于具有…

nginx转发netty长链接(nginx负载tcp长链接配置)

首先要清楚一点&#xff0c;netty是长链接是tcp连接不同于http中负载在http中配置server监听。长连接需要开启nginx的stream模块(和http是并列关系) 安装nginx时注意开启stream&#xff0c;编译时加上参数 --with-stream &#xff08;其他参数根据自己所需来加&#xff09; …

rem实现屏幕适配(jQuery)

一、rem换算 1.根据视口宽度动态计算字体大小&#xff0c;如果宽度大于750px&#xff0c;则将字体大小设置为100px&#xff0c;否则按比例缩小。 tips:使用时记得引入jQuery.js // 在文档加载完成后执行函数&#xff0c;确保DOM已经准备就绪$(function () {// 定义一个自执行…

增量学习中Task incremental、Domain incremental、Class incremental 三种学习模式的概念及代表性数据集?

1 概念 在持续学习领域&#xff0c;Task incremental、Domain incremental、Class incremental 是三种主要的学习模式&#xff0c;它们分别关注不同类型的任务序列和数据分布变化。 1.1 Task Incremental Learning (Task-incremental) 任务增量学习&#xff0c;也称为任务增…

盐分反演关键:批量计算常用的盐分指数反演变量

盐分反演关键&#xff1a;批量计算常用的盐分指数反演变量 一、引言 盐分指数反演是遥感应用中的一个重要方面&#xff0c;尤其在农业和环境监测中有着广泛的应用。通过遥感影像&#xff0c;研究人员可以高效地获取和分析地表盐分信息&#xff0c;为土地管理和作物生产提供重…

YOLOX+PyQt5交通路口智能监测平台设计与实现

1.概述 交通要道的路口上人车穿行&#xff0c;特别是上下班早高峰&#xff0c;且时常发生交通事故。因此对交通路口的车流量和人流量的监测必不可少。 2.检测模型 使用的检测模型为YOLOX模型&#xff0c;模型权重为训练VOC数据集得来&#xff0c;其中包括了二十个类别&#…

ONLYOFFICE 协作空间 2.6 已发布:表单填写房间、LDAP、优化房间和文件管理等

更新后的 ONLYOFFICE 协作空间带来了超过 20 项新功能和优化&#xff0c;让工作更加高效和舒适。阅读本文了解详情。 表单填写房间 这次更新增加了一种新的房间类型&#xff0c;可在 ONLYOFFICE 协作空间中组织简单的表单填写流程。 通过表单填写房间&#xff0c;目前可以完成…

仓库物品与装备物品位置更换

一、装备物品与选中的仓库物品位置交换 1、准备工作 2、Inventory Items 3、给Warehouse添加Grid Layout Group组件 4、复制Inventory Items&#xff0c;设置Grid Layout Group组件 5、创建文本ItemName和ItemDescription 6、设置物品数据 (1) 创建 ItemData.cs using Syst…