Matlab 编程示例 24:freexyn 在 b-site 中读取手写 mnist 数据集的 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