【人工智能项目】MNIST手写体识别实验及分析

基于卷积神经网络的mnist手写体识别 基于卷积神经网络的mnist手写体识别 1、卷积神经网络 1.1、什么是卷积神经网络 首先,卷积神经网络的概念,百度是这么给出解释的——卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一 。卷积神经网络... 阅读详情
AI摘要

本文介绍了使用Keras框架下的TensorFlow对MNIST手写数字数据集进行识别的实验过程。构建了MLP感知器与LeNet-5卷积神经网络模型,并详细解析了各层功能与参数设置。最终模型在测试集上达到95.13%的准确率。

【人工智能项目】MNIST数据集实验报告

这是之前接的小作业,现在分享出来,给大家以学习!!!
在这里插入图片描述

【人工智能项目】MNIST手写体识别实验及分析

1.实验内容简述

1.1 实验环境

本实验采用的软硬件实验环境如表所示:
在这里插入图片描述
在Windows操作系统下,采用基于Tensorflow的Keras的深度学习框架,对MNIST进行训练和测试。

采用keras的深度学习框架,keras是一个专为简单的神经网络组装而设计的Python库,具有大量预先包装的网络类型,包括二维和三维风格的卷积网络、短期和长期的网络以及更广泛的一般网络。使用keras构建网络是直接的,keras在其Api设计中使用的语义是面向层次的,网络组建相对直观,所以本次选用Keras人工智能框架,其专注于用户友好,模块化和可扩展性。

1.2 MNIST数据集介绍

MNIST(官方网站)是非常有名的手写体数字识别数据集。它由手写体数字的图片和相对应的标签组成,如:
在这里插入图片描述
MNIST数据集分为训练图像和测试图像。训练图像60000张,测试图像10000张,每一个图片代表0-9中的一个数字,且图片大小均为28*28的矩阵。

  • train-images-idx3-ubyte.gz: training set images (9912422 bytes) 训练图片
  • train-labels-idx1-ubyte.gz: training set labels (28881 bytes) 训练标签
  • t10k-images-idx3-ubyte.gz: test set images (1648877 bytes) 测试图片
  • t10k-labels-idx1-ubyte.gz: test set labels (4542 bytes) 测试标签

1.3 数据预处理

数据预处理阶段对图像进行归一化处理,我们将图片中的这些值缩小到 0 到 1 之间,然后将其馈送到神经网络模型。为此,将图像组件的数据类型从整数转换为浮点数,然后除以 255。这样更容易训练,以下是预处理图像的函数:务必要以相同的方式对训练集和测试集进行预处理:

之后对标签进行one-hot编码处理:将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点;机器学习算法中,特征之间距离的计算或相似度的常用计算方法都是基于欧式空间的;将离散型特征使用one-hot编码,会让特征之间的距离计算更加合理。

2.实验核心代码

(1)MLP感知器

# Build MLP
model = Sequential()

model.add(Dense(units=256,
                input_dim=784,
                kernel_initializer='normal',
                activation='relu'))
model.add(Dense(units=128,
                kernel_initializer='normal',
                activation='relu'))
model.add(Dense(units=64,
                kernel_initializer='normal',
                activation='relu'))
model.add(Dense(units=10,
                kernel_initializer='normal',
                activation='softmax'))

model.summary()

(2)CNN卷积神经网络

# Build LeNet-5
model = Sequential()
model.add(Conv2D(filters=6, kernel_size=(5, 5), padding='valid', input_shape=(28, 28, 1), activation='relu')) # C1
model.add(MaxPooling2D(pool_size=(2, 2))) # S2
model.add(Conv2D(filters=16, kernel_size=(5, 5), padding='valid', activation='relu')) # C3
model.add(MaxPooling2D(pool_size=(2, 2))) # S4
model.add(Flatten())
model.add(Dense(120, activation='tanh')) # C5
model.add(Dense(84, activation='tanh')) # F6
model.add(Dense(10, activation='softmax')) # output
model.summary()

2.2 模型解释

模型训练过程中,我们用到LENET-5的卷积神经网络结构。
在这里插入图片描述

第一层,卷积层
这一层的输入是原始的图像像素,LeNet-5 模型接受的输入层大小是28x28x1。第一卷积层的过滤器的尺寸是5x5,深度(卷积核种类)为6,不使用全0填充,步长为1。因为没有使用全0填充,所以这一层的输出的尺寸为32-5+1=28,深度为6。这一层卷积层参数个数是5x5x1x6+6=156个参数(可训练参数),其中6个为偏置项参数。因为下一层的节点矩阵有有28x28x6=4704个节点(神经元数量),每个节点和5x5=25个当前层节点相连,所以本层卷积层总共有28x28x6x(5x5+1)个连接。
第二层,池化层
这一层的输入是第一层的输出,是一个28x28x6=4704的节点矩阵。本层采用的过滤器为2x2的大小,长和宽的步长均为2,所以本层的输出矩阵大小为14x14x6。原始的LeNet-5 模型中使用的过滤器和这里将用到的过滤器有些许的差别,这里不过多介绍。
第三层,卷积层
本层的输入矩阵大小为14x14x6,使用的过滤器大小为5x5,深度为16。本层不使用全0填充,步长为1。本层的输出矩阵大小为10x10x16。按照标准卷积层本层应该有5x5x6x16+16=2416个参数(可训练参数),10x10x16x(5x5+1)=41600个连接。
第四层,池化层
本层的输入矩阵大小是10x10x16,采用的过滤器大小是2x2,步长为2,本层的输出矩阵大小为5x5x16。
第五层,全连接层
本层的输入矩阵大小为5x5x16。如果将此矩阵中的节点拉成一个向量,那么这就和全连接层的输入一样了。本层的输出节点个数为120,总共有5x5x16x120+120=48120个参数。
第六层,全连接层
本层的输入节点个数为120个,输出节点个数为84个,总共参数为120x84+84=10164个。
第七层,全连接层
LeNet-5 模型中最后一层输出层的结构和全连接层的结构有区别,但这里我们用全连接层近似的表示。本层的输入节点为84个,输出节点个数为10个,总共有参数84x10+10=850个。

2.3 模型过程

初始参数设定好之后开始训练,每次训练需要微调参数以得到更好的训练结果,经过多次尝试,最终设定参数为:
优化器:adam优化器
训练轮数:10
每次输入的数据量:500
LENET-5的卷积神经网络对MNIST数据集进行训练,并采用上述的模型参数,进行10轮训练,在训练集上达到了95%的准确率
在这里插入图片描述

3.结果分析机器总结

3.1 模型测试以及结果分析

为了验证模型的鲁棒性,在上述最优参数下保存在验证集上性能最好的模型,在测试集上进行最终的测试,得到最终的准确率为:95.13%.

为了更好的分析我们的结果,这里用混淆矩阵来评估我们的模型性能。在模型评估之前,先学习一些指标。

TP(True Positive):将正类预测为正类数,真实为0,预测也为0FN(False Negative):将正类预测为负类数,真实为0,预测为1FP(False Positive):将负类预测为正类数, 真实为1,预测为0。TN(True Negative):将负类预测为负类数,真实为1,预测也为1混淆矩阵定义及表示含义:

混淆矩阵是机器学习中总结分类模型预测结果的情形分析表,以矩阵形式将数据集中的记录按照真实的类别与分类模型预测的类别判断两个标准进行汇总。其中矩阵的行表示真实值,矩阵的列表示预测值,下面以本次案例为例,看下矩阵表现形式,如下:
在这里插入图片描述
在这里插入图片描述

3.2 结果对比

并与四层全连接层模型进行对比,全连接层的模型结构如下:
在这里插入图片描述

其结果如下:
在这里插入图片描述
在这里插入图片描述

总之,从结果上来看,最后经过不断地参数调优最终训练出了一个分类正确率在95%左右的模型,并且通过实验证明了模型具有很强的鲁棒性。

3.3 模型的预测

对单张图像进行预测:
在这里插入图片描述

4 总结

本文通过对卷积神经网络的研究流程分析,提出了一套完整的卷积神经网络MNIST手写体识别流程并也将本文的数据集分类正确率提高到95%的水平;其次,本文构建的模型是具有普适性的,可以稍加改进就应用于不同的数据集进行特征提取及分类。再次,本文在构建模型的过程中综合考虑了计算资源和时间成本,构建的卷积神经网络模型在普通的个人笔记本上即可进行训练,此外还增加了MLP感知器作为对比,从结果中看出卷积神经网络效果更好。综合以上几点来看,本文的研究具有现实可应用性,具有可推广性,因而具有较高的实用价值!

那么瓷们点赞评论收藏走一起,一波!!!
在这里插入图片描述

大三网络安全人工智能实验报告 本次实验熟知了pytorch和TensorFlow的使用,还有机器学习的整体流程和处理概况,解决了出现的诸多问题,尤其是在配置TensorFlow版本时出现的问题,熟知了基本的图像处理模型,以及卷积模型的基本构建。在参数调配方面,详细了解了分层取样法,k折交叉验证法的使用以及效果还有比例的调试。还有在关键参数如batch size、epoch num、学习率方面有着较好的经验总结。 阅读详情

相关推荐

重磅分享:使用PyTorch实现MNIST手写体识别代码

@本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 今天小编就为大家分享一篇使用PyTorch实现MNIST手写体识别代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 文章目录实验环境MNIST数据集介绍导入包定义超参数数据集定义网络实例化网络定义训练函数定义测试函数开始训练实验结果 实验环境 win10 + anaconda + jupyter notebo...

python基础学习教程 3388

Mnist手写体识别实验报告

实验(二) 代码段: # 实验环境:MindSpore-python3.7-aarch64 import os # os.environ['DEVICE_ID'] = '0' import mindspore as ms import mindspore.context as context import mindspore.dataset.transforms.c_transforms as C import mindspore.dataset.vision.c_transforms as CV f

我这个代码你能看懂吗? 4925

用TensorFlow Lite 写个手写体识别 APP

今天有个网友在手把手教你在Android上搭建tensorflow Lite2.0这篇文章下评论 求问如何进行一个图像的输入和数组的输出? 我想这也是很多初学者的痛点,很多入门同学都没有完整从模型建立,训练,到转换成TensorFlowLite,并在Android中实际的用。 于是我就把我之前写的demo给了他,想想还是抽空把这个demo写成文章,希望能够给帮助到更多的入门的同学。 虽然基于TensorFlow 实现手写体的文章,一抓一大把,但是我还是有必要啰嗦下,毕竟它是很好的入门人工智能的实例。 我

Howzit 1749

HIT人工智能导论实验2——基于Mindspore框架与ModelArts 平台的MNIST手写体识别实验

该实验包含了2部分内容:第一部分:基于Mindspore框架的模型本地训练及预测第二部分:基于Modelarts平台和Tensorflow框架的模型训练及部署(请勿付费)

m0_66571794的博客 3220

基于TensorFlow实现MNIST手写体数字识别

1. 背景描述 1.1 数据源介绍 数据源说明:60000训练集 + 10000测试集 图中的每个数字都是[28,28]的二阶数组表示,每个位点上的值是颜色的深度[0-255] ~ [白色-黑色]。根据规范化处理,我们后面会将灰度值缩放到[0,1]。 使用程序获取数据 from keras.datasets import mnist # 注意keras的默认路径是~/.keras/dataset...

阿尔卑斯LOVE 1072

40丨深度学习:使用CNN完成MNIST手写体识别(Keras)

使用Keras中的CNN完成MNIST手写体识别。

AIGC 962

基于 TensorFlow 的 PyTorch-MNIST 手写体识别系统开发案例

本案例采用的MNIST数据库是一个大型手写体数字数据库,通常用于训练各种图像处理系统。该数据库还广泛用于机器学习领域的培训和测试。MNIST数据集共有训练数据60000项、测试数据10000项。每张图像的大小为28*28(像素),每张图像都为灰度图像,位深度为8(灰度图像是0-255)。

华为云官方博客 1372

[Python人工智能] 六.TensorFlow实现分类学习及MNIST手写体识别案例

从本篇文章开始,作者正式开始研究Python深度学习、神经网络及人工智能相关知识。前一篇文章讲解了Tensorboard可视化的基本用法,并绘制整个神经网络及训练、学习的参数变化情况;本篇文章将通过TensorFlow实现分类学习,以MNIST数字图片为例进行讲解。本文主要结合作者之前的博客、AI经验和相关视频介绍,后面随着深入会讲解更多的Python人工智能案例及应用。基础性文章,希望对您有所帮助,如果文章中存在错误或不足之处,还请海涵~

杨秀璋的专栏 8538

pytorch实现MNIST手写体识别(使用全连接神经网络)

实验环境 pytorch 1.4 Windows 10 python 3.7 cuda 10.1(我笔记本上没有可以使用cuda的显卡) 实验过程 1. 确定我们要加载的库 import torch import torch.nn as nn import torchvision #这里面直接加载MNIST数据的方法 import torchvision.transforms as transf...

fufu_good的博客 2万+

基于MNIST的手写体数字识别

MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片。它也包含每一张图片对应的标签,告诉我们这个是数字几。作为kaggle上机器学习入门级别比赛,手写体数字识别是最基本的一个。这里所用的数据为MNIST提供的0-9的手写体数字,kaggle上提供了csv格式的数据文件,可以直接读取。手写体数字识别采用监督学习的方式。监督学习是通过已有的训练样本(即已知数据及其对应的输出)去训练得到一个最优模型,再利用这个模型将所有的输入映射为相应的输出,对输出进行简单的判断从而实现分类的目的。

m0_54772292的博客 1013

机器学习 —— MNIST手写体识别

给定数据集MNIST,Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npzMNIST是一个计算机视觉数据集,它包含各种手写数字图片0,1,2,…,9MNIST数据集包含:60000行的训练数据集(mnist.train)和10000行的测试数据集(mnist.test)。

ZShiJ的博客 2540

SwanLab入门深度学习:PyTorch MNIST手写体识别

SwanLab - MNIST手写体识别任务是一个经典的计算机视觉问题,SwanLab入门深度学习、PyTorch MNIST手写体识别、MNIST数据集、PyTorch教程、手写数字识别、深度学习入门、机器学习训练、可视化深度学习、PyTorch实例、神经网络模型、Python深度学习、机器学习项目、SwanLab教程、手写体识别算法、PyTorch基础

SoulmateY的博客 1031

深入探究手写体数字识别数据库:MNIST及其实战应用

本文还有配套的精品资源,点击获取 简介:手写体数字数据库是计算机视觉领域用于字符识别研究的核心资源,其中MNIST数据集被广泛应用于训练和测试手写数字识别模型。该数据库包含经过预处理的60,000个训练样本和10,000个测试样本,每个样本都是28x28像素的灰度图像。这些图像经过标准化处理,便于机器学习模型学习数字特征并实现高精度识别。该领域常用算法包括支持向量机、决策树...

weixin_30765637的博客 2387

用PyTorch实现MNIST手写体识别

实验环境 win10 + anaconda + jupyter notebook Pytorch1.1.0 Python3.7 gpu环境(可选) MNIST数据集介绍 MNIST 包括6万张28x28的训练样本,1万张测试样本,可以说是CV里的“Hello Word”。本文使用的CNN网络将MNIST数据的识别率提高到了99%。下面我们就开始进行实战。 导入包 import torch im...

abcgkj的博客 3069

神经网络深度学习+MNIST数字识别实验报告

神经网络深度学习+MNIST数字识别实验报告,包含完整实验报告+代码实现

Zephyr、FreeRTOS 和 RT-Thread

你是…更适合用嵌入式新手,刚接触 RTOSFreeRTOS(入门简单)IoT 项目开发,需要 BLE/WiFi/MQTTZephyr(协议全)想快速构建可部署的产品Zephyr(模块统一)只做单个任务或简单状态机控制FreeRTOS(轻量)做平台化、持续集成、自动测试Zephyr(CI 支持强)

is0815的博客 2248

Keras中使用CNN来完成MNIST手写体识别

     在上一篇文章中,使用了传统的多层感知机神经网络来实现手写体识别,具体参见这里,最终获得了大概97%的神经网络,还能不能得到更高的准确率的,答案当然是肯定的,那就是卷积神经网络CNN。在这里我们使用keras的CNN网络来实现MNIST手写体识别任务。具体的步骤与之前类似,直接贴代码吧:import numpy as np f = np.load('mnist.npz') x_train...

人如墨的博客 2515

Ubuntu下安装Hive3.1.2教程(附MySQL安装方法及安装包)

文章目录前言一、安装Hive1. 下载压缩包并解压2. 安装Hive3. 配置环境变量4. 修改配置文件二、MySQL安装与配置1. 安装MySQL2. 安装MySQL jdbc包3. 为Hive创建MySQL账号三、验证Hive安装及错误处理1. 启动Hadoop2. 启动hive3. 运行Hive实例总结 前言 Hive 的安装需要建立在 Hadoop 的之上(类似于Hbase),关于 Hadoop 的单机安装以及伪分布式安装可以参考作者的另两篇博客: Ubuntu下单机安装Hadoop详细教程(附

程序必须为人类阅读而编写,并且仅仅碰巧可以让机器执行 1万+

领取云主机,带你基于PyTorch构建高效手写体识别系统

利用深度学习框架PyTorch,结合MNIST手写体数据集,构建一个高效、准确的手写体识别系统,在云主机中安装PyCharm,并且基于PyTorch框架实现手写体识别。

华为云官方博客 1789

matlab 点云均值、中值、高斯滤波【2024最新版】

点云均值滤波、中值滤波、高斯滤波的matlab自带函数实现。博客长期更新,本文最近一次更新时间为:2024年11月9日。

点云侠的博客 5261

【系列06】端侧AI:构建与部署高效的本地化AI模型 第5章:模型剪枝(Pruning)

结构化剪枝移除的是模型中的整个结构,比如一个完整的神经元、一个卷积核或一个通道。修剪后的模型权重矩阵仍然是稠密的,因此能够充分利用现代硬件和软件的并行计算优势,从而显著提升推理速度。非结构化剪枝是最细粒度的剪枝方法。对于需要极致压缩但对推理速度要求不高的场景,非结构化剪枝是好的选择。它就像修剪一棵树,通过移除模型中不必要的“枝叶”,让模型变得更精简、更高效,从而适应资源受限的设备。,开发者可以方便地对模型的不同层进行剪枝,并根据需求进行微调,从而在不影响太多性能的前提下,获得一个更轻量、更高效的模型。

学习,输出==》再学习再输出 650
上一篇: 【人工智能项目】U-Net实战ISBI细胞分割
下一篇: 【人工智能项目】- 深度学习实现猫狗大战
mind_programmonkey
mind_programmonkey 领域专家: 算法与数据结构技术领域 领域专家: 算法与数据结构技术领域
博客等级 码龄9年 4435粉丝 1111原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

mind_programmonkey

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

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

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

打赏作者

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

抵扣说明:

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

余额充值