欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Matlab 编程示例 24:freexyn 在 b-site 中读取手写 mnist 数据集的 Matlab 代码 -4. 读取和转换 mnist 数据集的 Matlab 程序代码

最编程 2024-10-05 22:52:31
...

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