Matlab编程示例24:freexyn在b站的读取手写体mnist数据集的matlab代码

1.mnist手写体数据集介绍

手写数字MNIST数据库由60000个示例的训练集和10000个示例的测试集组成。这些数字已进行归一化,每个示例是28*28像素的图片,图片是黑底白字,每个图片的标签就是图片上的数字,数字范围是0~9,总共10各分类标签。对于那些想在真实世界的数据上尝试学习模式识别方法,同时在预处理和格式化上花费最少精力的人来说,这是一个很好的数据库。

附官网网址:MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burgesicon-default.png?t=O83Ahttp://yann.lecun.com/exdb/mnist/(有点奇怪,有时可以打开,有时提示要登陆,大家多试几次。若打不开也没关系,本文最后提供了已经下载好的数据集)

2.数据集格式和使用方法

在官网上下载的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个文件分别表示训练图像集(预测变量)、训练标签集(响应变量)、测试图像集、测试标签集。

现在问题来了,这是什么鬼格式,如何查看图片,又如何使用数据集进行训练和测试?

简单来说(详细来说,看视频66.35),这是一种类似二进制格式的数据,为什么使用这种格式,我想可能是为了压缩数据大小,方便下载和传输吧,如果直接使用图片存储格式,7万张图片的压缩包有多大,大家自己考虑下哈。

所以下载后的文件是无法直接使用的,那么现在的问题就是,这个数据文件如何转换成我们常用的图片格式,以便可以查看,可以输入给算法程序进行训练。

3.数据集转换提取的思路和方法

若要进行数据转换,首先需要理解源文件的数据结构。

简单来说(详细来说,看视频66.35),源文件中前面几行数据是简单介绍的信息,在数据提取时应该跳过,后面的数据按照一定的规律,循环表达图片或者标签的数据,在数据读取的时候,要按照规律一组一组的提取数据,并按照预期的图片或标签数据结构进行重构,得到最终直接表达图片或者标签的数据。

准备工作:打开Matlab,在当前文件夹新建一个名为“mnist”的文件夹,然后把上面下载的4个数据文件放进去。

以训练图片/标签集文件为例,具体Matlab程序怎么写,看下面。

4.mnist数据集读取和转换的Matlab程序代码

clear,clc,close all

% 66.35

% 作者:freexyn

%% 01 首先提取训练图片集

filename='mnist\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:num1

    temp=fread(fid,row1*colomn1);

    temp=reshape(temp,[row1,colomn1]);

    trainimages {i}=temp';

end

fclose(fid);

%读取完毕,读取后的图片数据存储在trainimages变量中

%随便查看一下第5张图片,确认提取无误

index=5;

figure

imshow(trainimages{index})

%% 02 读取训练标签集

filename='mnist\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:num2

    trainlabels(i)=fread(fid,1);

end

fclose(fid);

%查看下前面5个标签数据,确认提取无误

trainlabels(1:5)

%% 03 把上面提取好的trainimages存储成外部图片文件

%总共6万个图片,使用for循环读取和存出,注意,相同类别的图片存储到相同命名文件下面。例如标签0的所有图片存储到子文件0下面。最终形成0~9共10个子文件夹。

for index=1:num1

    img=trainimages{index};

    label=num2str(trainlabels(index));

    path=fullfile('mnist','mnist0','traindata',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

5.数据集和转换好的数据集获取方法

以上程序代码若有不明白的可以直接留言交流。

另外,也可以跳过上述内容,直接下载转换好的数据集用于训练和学习,电梯直达:

freexyn编程实例视频教程课件讲义文档PDF以及课程数据集素材下载链接,百度网盘:https://pan.baidu.com/s/1ZvJFPSOpmQ7P86H_oi8HGA?pwd=free

阿里云盘:https://www.alipan.com/s/rTyZoexUDTE

相关视频推荐

66.35 Matlab程序读取Mnist手写体数据集 介绍 下载 读取 另存 编程演示

45.2 图像数据集的格式和输入卷积网络的方式:表 table

66.41 自制分类/回归数据集(含下载)

45.1 一个实例入门Matlab深度学习|卷积神经网络

45.26 Matlab卷积神经网络调参实例演示(分类)

23.1 一节入门Matlab拟合问题fit,建立预测变量与响应变量之间的关系(一般是函数关系)

End

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

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

相关文章

记录一次病毒启动脚本

在第一次下载软件时,目录中配了一个使用说明,说是需要通过start.bat 这个文件来启动程序,而这个 start.bat 就是始作俑者: 病毒作者比较狡猾,其中start.bat 用记事本打开是乱码,但是可以通过将这个批处理…

小程序 uniapp+Android+hbuilderx体育场地预约管理系统的设计与实现

目录 项目介绍支持以下技术栈:具体实现截图HBuilderXuniappmysql数据库与主流编程语言java类核心代码部分展示登录的业务流程的顺序是:数据库设计性能分析操作可行性技术可行性系统安全性数据完整性软件测试详细视频演示源码获取方式 项目介绍 用户 注册…

探索 Python 虚拟环境的奥秘:virtualenv 的魔法世界

文章目录 探索 Python 虚拟环境的奥秘:virtualenv 的魔法世界背景:为何选择 virtualenv?虚拟环境的守护者:virtualenv 是什么?安装 virtualenv:简单几步,开启隔离之旅掌握 virtualenv 的基本用法…

LC刷题专题:堆、大顶堆、小顶堆

文章目录 692. 前K个高频单词215. 数组中的第K个最大元素2336、无限集中的最小数字 这篇文章以后记录自己刷到的题目中与堆有关的。 692. 前K个高频单词 这个题目整体不难,是前k个高频元素的改进版,只需要在创建小顶堆时执行排序规则即可。如果出现次数…

镜头、diffuser、DOE

三种常见的光学器件:镜头、扩散器(diffuser)、衍射光学元件(DOE) lensdiffuserDOE镜头扩散器衍射光学器件作用聚焦或发散均匀化光束生成特定形状的光斑应用领域TOF结构光算法 1.1 镜头(Lens) …

微服务_3.微服务保护

文章目录 一、微服务雪崩及解决方法1.1、超时处理1.2、仓壁模式1.3、断路器1.4、限流 二、Sentinel2.1、流量控制2.1.1、普通限流2.1.2、热点参数限流 2.2、线程隔离2.3、熔断降级2.3.1、断路器状态机2.3.2、断路器熔断策略2.3.2.1、慢调用2.3.2.2、异常比例,异常数…

(12)MATLAB莱斯(Rician)衰落信道仿真2补充:莱斯衰落信道与莱斯随机变量

文章目录 前言1.关于莱斯衰落信道仿真的两个公式2.由式(1)推出式(2) 前言 本文给出关于莱斯衰落信道仿真的两个公式之间的推导。 1.关于莱斯衰落信道仿真的两个公式 在上一篇《(11)MATLAB莱斯&#xff08…

产品经理产出的原型设计 - 需求文档应该怎么制作?

需求文档,产品经理最终产出的文档,也是产品设计最终的表述形式。本次分享呢,就是介绍如何写好一份需求文档。 所有元件均可复用,可作为管理端原型设计模板,按照实际项目需求进行功能拓展。有需要的话可分享源文件。 …

Origin正态分布检验

在spass中用Shapiro-Wilk检验--正态分布检测 Shapiro-Wilk检验--正态分布检测_spss shapiro-wilk检验-CSDN博客

用 LoRA 微调 Stable Diffusion:拆开炼丹炉,动手实现你的第一次 AI 绘画

总得拆开炼丹炉看看是什么样的。这篇文章将带你从代码层面一步步实现 AI 文本生成图像(Text-to-Image)中的 LoRA 微调过程,你将: 了解 Trigger Words(触发词)到底是什么,以及它们如何影响生成结…

HTTPS协议简单介绍

HTTP协议简单介绍HTTP协议简单介绍-CSDN博客 目录 一、对称加密和非对称加密 对称加密 非对称加密 总结 二、HTTPS协议 定义 关键特点 工作原理 详细通信过程 1. 客户端请求连接 2. 服务器响应 3. 密钥交换 4. 加密通信 5. 关闭连接 ​编辑 优势 缺点 1. 性能…

leetcode35--搜索插入位置--二分查找刷题

搜索插入位置 一共会出现下面四种情况: 目标值在数组所有元素之前 目标值等于数组中某一个元素 目标值插入数组中的位置 目标值在数组所有元素之后 首先在二分查找的代码之前处理掉目标值在数组所有元素之前和之后的情况如果目标值在数组中的某个位置&#xff0c…

setTimeout,setInterval ,requestAnimationFrame定时器

setTimeout,setInterval ,requestAnimationFrame定时器 定时器函数通常用于执行定时任务,也就是说你做了一个功能放在定时器函数里,它可以在特定的时间去执行你的指令,或者说隔多长时间(单位时间内—毫秒为…

关于cefsharp访问iqiyi.com显示403 Forbidden解决办法(2种方法)

1.cefsharp浏览器访问iqiyi.com异常 (403 Forbidden) 403 Forbidden Q_DENY: Forbidden by iQIYI WAF! Any problem, contact iQIYI Security Group (security-help). Request ID: c0597b5aeead125907f7 2.解决办法(2种) 1)屏蔽掉 cefSettings.UserAgent2)修改 cefSettings…

酒店智能门锁SDK接口pro[V10] 门锁校验C#-SAAS本地化-未来之窗行业应用跨平台架构

一、代码 int 酒店标识_int Convert.ToInt32(酒店标识);StringBuilder 锁号2024 new StringBuilder(8);//信息 "未知返回值:" bufCard_原始;GetGuestLockNoByCardDataStr_原始(酒店标识_int, bufCard_原始.ToString(), 锁号2024);StringBuilder 退…

.NET Core 高性能并发编程

一、高性能大并发架构设计 .NET Core 是一个高性能、可扩展的开发框架,可以用于构建各种类型的应用程序,包括高性能大并发应用程序。为了设计和开发高性能大并发 .NET Core 应用程序,需要考虑以下几个方面: 1. 异步编程 异步编程…

开发环境简单介绍

目录 开发环境keil的安装和使用 keil的介绍 keil的安装 keil的简单使用 STC-ISP的安装 STC-ISP简单介绍 开发环境测试 总结 开发环境keil的安装和使用 keil的介绍 Keil uVision5是一个集成开发环境(IDE),用于对嵌入式系统中的微控制器…

Windows 11 安装配置 Git 教程

目录 Git Windows 11 环境安装配置 Git Git Git是一个开源的分布式版本控制系统,由Linus Torvalds创建,用于有效、高速地处理从小到大的项目版本管理。Git是目前世界上最流行的版本控制系统,广泛应用于软件开发中。 以下是Git的一些关键特…

如何用深度神经网络预测潜在消费者

1. 模型架构 本项目采用的是DeepFM模型,其结构结合了FM(因子分解机)与深度神经网络(DNN),实现了低阶与高阶特征交互的有效建模。模型分为以下几层: 1.1 FM部分(因子分解机层&#…

深入探究:在双链表指定元素的后面进行插入操作的顺序

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝惟有主动付出,才有丰富的果…