自学内容网 自学内容网

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


原文地址:https://blog.csdn.net/freexyn/article/details/142718951

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!