当前位置: 首页 > news >正文

matlab代码--卷积神经网络的手写数字识别

1.cnn介绍

卷积神经网络(Convolutional Neural Network, CNN)是一种深度学习的算法,在图像和视频识别、图像分类、自然语言处理等领域有着广泛的应用。CNN的基本结构包括输入层、卷积层、池化层(Pooling Layer)、全连接层(Fully Connected Layer)和输出层。其中,卷积层通过一系列可学习的滤波器(或称核)扫描输入数据,旨在检测特定的局部特征。这些滤波器能够自动学习并提取图像中的边缘、纹理和形状等低层次特征,以及更复杂的高层次特征。
卷积神经网络的核心特性包括局部连接、权值共享和池化。局部连接意味着每个神经元只与输入数据的局部区域相连,这有助于捕捉图像的局部特征。权值共享则大大减少了网络参数的数量,降低了模型的复杂度和计算量,同时提高了模型的泛化能力。池化层则通过下采样操作(如最大池化或平均池化)进一步减少数据的维度,保留重要特征并减少过拟合的风险。这些特性使得CNN在处理高维数据(如图像)时具有显著的优势和效率。
卷积神经网络在诸多领域都取得了显著的成果。在图像分类任务中,CNN能够准确识别并分类各种物体和场景。在目标检测领域,基于CNN的方法如YOLO(You Only Look Once)和Faster R-CNN等实现了高效且准确的目标检测。此外,CNN还在人脸识别、语音识别、自动驾驶和医疗影像分析等领域展现出了巨大的潜力。随着深度学习技术的不断发展,卷积神经网络也在持续演进,如引入残差网络(ResNet)、卷积神经网络与循环神经网络的结合(如CRNN)等新型网络结构,以及通过迁移学习、深度学习框架优化等技术进一步提升其性能和应用范围。

2.cnn介绍

手写数字MNIST数据库由60000个示例的训练集和10000个示例的测试集组成。这些数字已进行归一化,每个示例是28*28像素的图片,图片是黑底白字,每个图片的标签就是图片上的数字,数字范围是0~9,总共10各分类标签。对于那些想在真实世界的数据上尝试学习模式识别方法,同时在预处理和格式化上花费最少精力的人来说,这是一个很好的数据库。其下载网址为附官网网址:http://yann.lecun.com/exdb/mnist/
在官网上下载的mnist数据集格式是这样的,包含4个文件:
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)
这里,4个文件分别表示训练图像集(预测变量)、训练标签集(响应变量)、测试图像集、测试标签集。
简单来说,这是一种类似二进制格式的数据,为什么使用这种格式,我想可能是为了压缩数据大小,方便下载和传输吧,如果直接使用图片存储格式,7万张图片的压缩包有多大。

将原始格式转换为常用的图片格式,代码如下,

clear,clc,close all
%% 01 首先提取训练图片集
filename='train-images-idx3-ubyte';
%读取文件头信息,并转换
fid=fopen(filename);
magic1=fread(fid,4);
num1=fread(fid,4);
row1=fread(fid,4);
colomn1=fread(fid,4);
magic1=zhuanhuan(magic1)
num1=zhuanhuan(num1)
row1=zhuanhuan(row1)
colomn1=zhuanhuan(colomn1)
%读取图片像素单点数据,并重构图片数据结构
trainimages=cell(num1,1);
for i=1:num1temp=fread(fid,row1*colomn1);temp=reshape(temp,[row1,colomn1]);trainimages {i}=temp';
end
fclose(fid);
%读取完毕,读取后的图片数据存储在trainimages变量中
%随便查看一下第5张图片,确认提取无误
for i=1:5
imshow(trainimages{i})
hold on
end
%% 02 读取训练标签集
filename='train-labels-idx1-ubyte';
%读取文件头信息,并转换
fid=fopen(filename);
magic2=fread(fid,4);
num2=fread(fid,4);
magic2=zhuanhuan(magic2)
num2=zhuanhuan(num2)
%读取标签数据,不需要数据重构,直接赋值和存储到trainlabels变量中即可
trainlabels=zeros(num2,1);
for i=1:num2trainlabels(i)=fread(fid,1);
end
fclose(fid);
%查看下前面5个标签数据,确认提取无误
trainlabels(1:5)%% 03 把上面提取好的trainimages存储成外部图片文件
%总共6万个图片,使用for循环读取和存出,注意,相同类别的图片存储到相同命名文件下面。例如标签0的所有图片存储到子文件0下面。最终形成0~9共10个子文件夹。
for index=1:num1img=trainimages{index};label=num2str(trainlabels(index));path=fullfile('./','bmp',label,...['img',label,num2str(index),'.png']);%imwrite(img,path);
end%% 04 把上面提取好的trainimages和trainlabels存储成外部mat文件,命名为mnist0。
% save mnist0.mat trainimages trainlabels% 转换的函数,上面程序代码调用
function y=zhuanhuan(data)b=dec2bin(data,8);c=[b(1,:),b(2,:),b(3,:),b(4,:)];y=bin2dec(c);
end

在这里插入图片描述

matlab实现

CNN基本组成:输入层、隐藏层、输出层。但隐藏层分为:卷积层 + 池化层
1.输入层
为一张原始的图片,尺寸为28*28
2.卷积层
通过使用一系列可学习的滤波器(或称为卷积核)来扫描输入图像,提取图像的局部特征。这些滤波器能够捕捉到图像中的边缘、纹理等基本特征。用于提取图像的局部特征.
3.池化层
用于降低特征的空间维度,减少参数数量和计算量,提高网络的鲁棒性。常见的池化操作有最大池化(Max Pooling)和平均池化(Average Pooling)、
4.全连接层
在卷积和池化层之后,网络会包含一个或多个全连接层,将卷积层和池化层提取的特征映射到高维空间,以便进行分类。最后一层将学习到的特征映射到最终输出,如分类标签。.
5输出层
是一个softmax层,用于将全连接层的输出转换为概率分布,从而实现多类别分类,这里我们需要实现10个目标的分类。
首先,使用MATLAB自带的神经网络工具箱,对手写数字识别问题进行分类识别,训练中设置不同的最小批次参数。
使用的卷积网络结构如下

部分代码:

%卷积层
layers = [imageInputLayer([28 28 1],"Name","imageinput")convolution2dLayer([5 5],10,"Name","conv_1","Padding","same")batchNormalizationLayer("Name","batchnorm_1")tanhLayer("Name","tanh_1")averagePooling2dLayer([5 5],"Name","avgpool2d_1","Padding","same")convolution2dLayer([5 5],10,"Name","conv_2","Padding","same")batchNormalizationLayer("Name","batchnorm_2")tanhLayer("Name","tanh_2")averagePooling2dLayer([5 5],"Name","avgpool2d_2","Padding","same")fullyConnectedLayer(10,"Name","fc")softmaxLayer("Name","softmax")
classificationLayer("Name","classoutput")];训练参数如下所示
% 设置训练参数
opts = trainingOptions('sgdm', ...'InitialLearnRate',0.01, ...%初始学习率'Shuffle','every-epoch', ...'MaxEpochs',3,...%最大训练轮数'ValidationData', test, ...'ValidationFrequency',150,...%测试频率'MiniBatchSize',200,... %minibatch大小'Verbose',false, ...'Plots','training-progress');

在这里插入图片描述
通过自己手动实现卷积神经网络的过程,其过程包括,
1.定义网络结构
卷积层:定义卷积核的大小、数量和步长。卷积层通过滑动窗口的方式对输入图像进行特征提取。
激活函数:在卷积层之后,通常会应用一个非线性激活函数,本文使用ReLU函数,这有助于增加网络的非线性特性。
池化层:池化层(如最大池化)用于减少特征图的维度,降低计算复杂度,并提高模型的平移不变性。
全连接层:在卷积层和池化层之后,通常会添加一到两层全连接层,用于对提取的特征进行高级别的推理。
2.前向传播
卷积操作:对于输入图像和每个卷积核,执行卷积操作以生成特征图。
激活函数:将卷积层的输出通过激活函数。
池化操作:对激活后的特征图进行池化操作。
全连接层:将池化层的输出展平成一个向量,并输入到全连接层中进行计算。
3.损失函数和优化器
损失函数:定义损失函数,本文使用交叉熵损失函数,用于衡量模型的预测结果与真实标签之间的差距。
优化器:选择优化器,本文使用随机梯度下降(SGD)优化器,用于更新模型的权重和偏置,以最小化损失函数。
4. 反向传播
计算梯度:根据损失函数,计算每一层参数的梯度。
更新参数:使用优化器更新模型的权重和偏置。
5. 训练模型
迭代训练:将数据集分成训练集和测试集,使用训练集进行多次迭代训练。在每次迭代中,执行前向传播、计算损失、反向传播和更新参数的步骤。
6.验证性能:在每次迭代或每几个迭代后,使用测试集评估模型的性能。

自己手写cnn,得到的训练效果如下
在这里插入图片描述

完整代码获取:这里

相关文章:

matlab代码--卷积神经网络的手写数字识别

1.cnn介绍 卷积神经网络(Convolutional Neural Network, CNN)是一种深度学习的算法,在图像和视频识别、图像分类、自然语言处理等领域有着广泛的应用。CNN的基本结构包括输入层、卷积层、池化层(Pooling Layer)、全连…...

Scala—Map用法详解

Scala—Map用法详解 在 Scala 中,Map 是一种键值对的集合,其中每个键都是唯一的。Scala 提供了两种类型的 Map:不可变 Map 和可变 Map。 1. 不可变集合(Map) 不可变 Map 是默认的 Map 实现,位于 scala.co…...

极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【六】

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...

ES6 、ESNext 规范、编译工具babel

ES6 、ESNext 规范、编译工具简介 ES6ES(ECMAScript) vs JS常量进一步探讨 obj对象的扩展面试:使对象属性也不能更改——Object.freeze(obj) 解构deconstruction变量的解构赋值:数组解构赋值:对象解构赋值:…...

DeepSpeed 配置文件(DeepSpeed Configuration Files)详解:中英文解释

中文版 本文详细介绍 DeepSpeed 配置文件,结合 4 卡 3090 的实际使用场景,重点解释各个参数的含义,并提供应对爆显存的方案。 DeepSpeed 配置文件详解:从基础到实战 DeepSpeed 是用于加速大规模分布式训练的重要工具&#xff0c…...

前端JavaScript(一)---基本介绍

Javascript是一种由Netscape(网景)的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如Perl,遗留的速度问题,为客户提供更流畅的浏览效果。当时服务端需要对…...

文本处理之sed

1、概述 sed是文本编辑器,作用是对文本的内容进行增删改查。 和vim不一样,sed是按行进行处理。 sed一次处理一行内容,处理完一行之后紧接着处理下一行,一直到文件的末尾 模式空间:临时储存,修改的结果临…...

uniapp在App端定义全局弹窗,当打开关闭弹窗会触发onShow、onHide生命周期怎么解决?

在uniapp(App端)中实现自定义弹框,可以通过创建一个透明页面来实现。点击进入当前页面时,页面背景会变透明,用户可以根据自己的需求进行自定义,最终效果类似于弹框。 遇到问题:当打开弹窗(进入弹窗页面)就会触发当前页…...

计算机网络 实验七 NAT配置实验

一、实验目的 通过本实验理解网络地址转换的原理和技术,掌握扩展NAT/NAPT设计、配置和测试。 二、实验原理 NAT配置实验的原理主要基于网络地址转换(NAT)技术,该技术用于将内部私有网络地址转换为外部公有网络地址,从…...

数据结构——排序算法第二幕(交换排序:冒泡排序、快速排序(三种版本) 归并排序:归并排序(分治))超详细!!!!

文章目录 前言一、交换排序1.1 冒泡排序1.2 快速排序1.2.1 hoare版本 快排1.2.2 挖坑法 快排1.2.3 lomuto前后指针 快排 二、归并排序总结 前言 继上篇学习了排序的前面两个部分:直接插入排序和选择排序 今天我们来学习排序中常用的交换排序以及非常稳定的归并排序 快排可是有多…...

【kafka04】消息队列与微服务之Kafka 图形工具

Kafka 在 ZooKeeper 里面的存储结构 topic 结构 /brokers/topics/[topic] partition结构 /brokers/topics/[topic]/partitions/[partitionId]/state broker信息 /brokers/ids/[o...N] 控制器 /controller 存储center controller中央控制器所在kafka broker的信息 消费者 /c…...

剖析前后端 API 接口参数设计:JSON 数据结构化全攻略

在当今软件开发领域,前后端分离架构已成为主流趋势。而 API 接口作为前后端之间数据交互的桥梁,其设计的合理性对系统的可维护性和扩展性起着至关重要的作用。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式&…...

vue3 多种方式接受props,定义ref,reactive

定义props 1 第一种 interface AddType { dialogStudyVisible: boolean; } const props defineProps<AddType>(); 第二种 // const props defineProps({ // dialogStudyVisible:{ // type:Boolean, // default:false // } // }) 第三种 // const …...

逻辑处理器核心指纹修改

navigator.hardwareConcurrency的属性,可以用来获取CPU的逻辑处理器核心数。 1、navigator.hardwareConcurrency接口定义&#xff1a; third_party\blink\renderer\core\frame\navigator_concurrent_hardware.idl // https://html.spec.whatwg.org/C/#navigator.hardwarecon…...

如何制作项目网页

一、背景 许多论文里经常会有这样一句话Supplementary material can be found at https://hri-eu.github.io/Lami/&#xff0c;这个就是将论文中的内容或者补充视频放到一个网页上&#xff0c;以更好的展示他们的工作。因此&#xff0c;这里介绍下如何使用前人提供的模板制作我…...

mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?

随笔 从千万粉丝“何同学”抄袭开源项目说起&#xff0c;为何纯技术死路一条&#xff1f; 数据源的统一与拆分 监控报警系统的指标、规则与执行闭环 我们的系统应该配置哪些监控报警项&#xff1f; 监控报警系统如何实现自监控? java 老矣&#xff0c;尚能饭否&#xff…...

1、正则表达式

grep匹配 grep用来过滤文本内容&#xff0c;以匹配要查询的结果。 grep root /etc/passwd&#xff1a;匹配包含root的行 -m 数字&#xff1a;匹配几次后停止 -v&#xff1a;取反-i&#xff1a;忽略字符的大小写&#xff0c;默认的&#xff0c;可以不加-n&#xff1a…...

Airsim安装问题:This project was made with a different version of the Unreal Engine.

本文记录如何在 Ubuntu 18.04 系统中配置 AirSim 和 Unreal Engine 4.27&#xff0c;并成功打开默认的 Blocks 环境项目。 环境说明 系统&#xff1a;Ubuntu 18.04Unreal Engine 版本&#xff1a;4.27AirSim&#xff1a;主分支文件路径&#xff1a; Unreal Engine&#xff1a…...

java八股-分布式服务的接口幂等性如何设计?

文章目录 接口幂等token Redis分布式锁 原文视频链接&#xff1a;讲解的流程特别清晰&#xff0c;易懂&#xff0c;收获巨大 【新版Java面试专题视频教程&#xff0c;java八股文面试全套真题深度详解&#xff08;含大厂高频面试真题&#xff09;】 https://www.bilibili.com/…...

vscode python code runner执行乱码

打开vscode code runner插件配置&#xff0c;如图所示&#xff1a; 然后在setting.json修改运行python的默认命令&#xff1a; 将原来 替换成 "python":"set PYTHONIOENCODINGutf8 && python", 参考&#xff1a;Vscode——python环境输出中文乱…...

Java中的继承详解

在Java编程中&#xff0c;继承&#xff08;Inheritance&#xff09;是一种面向对象编程&#xff08;OOP&#xff09;的核心概念&#xff0c;它允许一个类&#xff08;称为子类或派生类&#xff09;继承另一个类&#xff08;称为父类或基类&#xff09;的属性和方法。通过继承&a…...

kafka进阶_2.存储消息

文章目录 一、存储消息介绍二、副本同步2.1、数据一致性2.2、HW在副本之间的传递 如果想了解kafka基础架构和生产者架构可以参考 kafka基础和 Kafka进阶_1.生产消息。 一、存储消息介绍 数据已经由生产者Producer发送给Kafka集群&#xff0c;当Kafka接收到数据后&#xff0c…...

如何启用本机GPU硬件加速猿大师播放器网页同时播放多路RTSP H.265 1080P高清摄像头RTSP视频流?

目前市面上主流播放RTSP视频流的方式是用服务器转码方案&#xff0c;这种方案的好处是兼容性更强&#xff0c;可以用于不同的平台&#xff0c;比如&#xff1a;Windows、Linux或者手机端&#xff0c;但是缺点也很明显&#xff1a;延迟高、播放高清或者同时播放多路视频视频容易…...

如何更好地设计SaaS系统架构

SaaS&#xff08;Software as a Service&#xff09;架构设计的核心目标是满足多租户需求、支持弹性扩展和高性能&#xff0c;同时保持低成本和高可靠性。一个成功的SaaS系统需要兼顾技术架构、资源利用、用户体验和商业目标。本文从以下几个方面探讨如何更好地设计SaaS系统架构…...

表征对齐在训练DiT模型中的重要性

Diffusion Models专栏文章汇总&#xff1a;入门与实战 前言&#xff1a;训练过DiT模型的读者们肯定有所体会&#xff0c;相比于UNet模型训练难度大了很多&#xff0c;模型不仅很难收敛&#xff0c;而且非常容易训崩&#xff0c;其中一个很重要的原因是没有进行表征对齐&#xf…...

Qt中CMakeLists.txt解释大全

‌Qt从Qt5.15版本开始正式推荐使用CMake进行项目管理‌。 在Qt 5.15之前&#xff0c;虽然可以使用CMake进行构建&#xff0c;但Qt官方更推荐使用qmake。 然而&#xff0c;从Qt5.15开始&#xff0c;Qt官方正式推荐使用CMake作为主要的构建系统&#xff0c;并在Qt 6中进一步加强了…...

【在 PyTorch 中使用 tqdm 显示训练进度条,并解决常见错误TypeError: ‘module‘ object is not callable】

在 PyTorch 中使用 tqdm 显示训练进度条&#xff0c;并解决常见错误TypeError: module object is not callable 在进行深度学习模型训练时&#xff0c;尤其是在处理大规模数据时&#xff0c;实时了解训练过程中的进展是非常重要的。为了实现这一点&#xff0c;我们可以使用 tq…...

数据结构-堆的实现和应用

目录 1.堆的概念 2.堆的构建 3.堆的实现 4.堆的功能实现 4.1堆的初始化 4.2堆的销毁 4.3堆的插入 4.3.1向上调整 4.4堆的删除 4.4.1向下调整法 ​编辑4.5取堆顶 5. 向上调整法和向下调整法比较 6.堆的应用 6.1TOP-K问题 6.2TOP-K思路 6.2.1用前n个数据来建堆 6.…...

数据分析的尽头是web APP?

数据分析的尽头是web APP&#xff1f; 在做了一些数据分析的项目&#xff0c;也制作了一些数据分析相关的web APP之后&#xff0c;总结自己的一些想法和大家分享。 1.web APP是呈现数据分析结果的另外一种形式。 数据分析常见的结果是数据分析报告&#xff0c;可以是PPT或者…...

YOLO系列论文综述(从YOLOv1到YOLOv11)【第3篇:YOLOv1——YOLO的开山之作】

YOLOv1 1 摘要2 YOLO: You Only Look Once2.1 如何工作2.2 网络架构2.3 训练2.4 优缺点 YOLO系列博文&#xff1a; 【第1篇&#xff1a;概述物体检测算法发展史、YOLO应用领域、评价指标和NMS】【第2篇&#xff1a;YOLO系列论文、代码和主要优缺点汇总】 ——————————…...

php网站建设制作方案/百度基木鱼建站

智慧警务三维电子沙盘系统 以“情报大数据、指挥扁平化、勤务可视化、情指勤一体化”为设计思想&#xff0c;整合三台合一、有无线通讯、12110短信平台、天网、交通平台、治安卡口、情报平台、一标三实、PGIS、GPS&#xff0c;采用大数据、云计算、三维GIS、移动互联网、物联…...

重庆所有做网站的公司/做微商怎么找客源加人

1、time.Sleep 可以直接sleep需要的时间之后&#xff0c;在执行&#xff0c;调度器会把当前协程置为GWaiting状态&#xff0c;放入定时器阻塞堆&#xff0c;是一个小顶堆&#xff0c;不断去堆顶元素 2、time.Timer 简单使用 fmt.Println("now time",time.Now().F…...

尼高网站设计公司/香水推广软文

大家好&#xff0c;我是乔戈里。最近有一位小学弟成功去了腾讯&#xff0c;洋哥找他要了一些面试相关的资料&#xff0c;内容涵盖计算机基础、Java、分布式、大厂面经&#xff0c;质量非常高&#xff01;&#xff01;&#xff01;不要再看那些到处拼凑出来的面试题了&#xff0…...

厦门建设局耿家强/seo链接优化建议

曾经多次我的鼠标都是因为滚轴坏了而作废&#xff0c;我想这也是大部分小伙伴会遇到的问题。最近我的无线鼠标摔了一下&#xff0c;滚轴坏了。这次闲来无事&#xff0c;索性直接拆机&#xff0c;探索探索&#xff0c;看看可以不可以修好。结果还真的被朕修好了ahahah&#xff0…...

南京美容网站建设/全渠道营销案例

著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。作者&#xff1a;张俊博链接&#xff1a;https://www.zhihu.com/question/22298352/answer/34267457来源&#xff1a;知乎有那么麻烦吗&#xff1f;不推荐用“反转/翻转/反褶/对称”等解释卷积…...

做产地证网站/公司网站如何推广

我这算是积极响应国家号召了&#xff0c;对吧&#xff1f;总理都点赞好几次地摊经济了&#xff0c;朋友圈和微信 《一线大厂Java面试题解析后端开发学习笔记最新架构讲解视频实战项目源码讲义》 【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享 社群都刷爆了。有一段白…...