许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  MNIST手写体数据集读取提取转换图片mat文件matlab代码编程示例24

MNIST手写体数据集读取提取转换图片mat文件matlab代码编程示例24

阅读数 3
点赞 0
article_banner


freexyn 在b站的读取手写体数据集的matlab代码。

1.mnist手写体数据集介绍

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

附官网网址:http://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个文件分别表示训练图像集(预测变量)、训练标签集(响应变量)、测试图像集、测试标签集。

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

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

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

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

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

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

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

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

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

代码块

Python


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



免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空