MNIST数据集转为matlab可读的mat格式

MNIST手写数字图像数据库
60000个训练集,10000个测试集,灰度图,大小均为28*28

数据集网址:http://yann.lecun.com/exdb/mnist/

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)
下载后得到以上四个文件,解压后得到的数据matlab无法直接读取这个格式,故写了一个matlab程序读取该数据。

demoMNIST.m - 主程序

%% MNIST数据库读取

%读取MNIST数据集中的图片
train_images = readMNISTImages('train-images-idx3-ubyte'); %60000个训练集,大小为28*28*60000
test_images =  readMNISTImages('t10k-images-idx3-ubyte');  %10000个训练集,大小为28*28*10000

%读取MNIST数据集中的标签
train_labels1 = readMNISTLabels('train-labels-idx1-ubyte');%标签0~9;60000个标签,大小为60000*1
test_labels1 = readMNISTLabels('t10k-labels-idx1-ubyte'); %10000个标签,大小为10000*1

readMNISTImages.m  - 读取数据集中的图片

function images = readMNISTImages(filename)
%
%功能:读取MNIST数据集中的图片
%Input:
%filename - 文件名称
%
%Output:
%images - 读取到的图片(28*28*图片数)

FID=fopen(filename,'r');  %fopen()是最核心的函数,导入文件; 'r'代表读入

%读取前16个字节(一个字节八位),(这儿的注释以训练集图片为例)
magic = fread(FID, 1, 'int32', 0, 'ieee-be');            %0 0 8 3 -> 00000000 00000000 00000100 00000011 -> 2051   
numImages = fread(FID, 1, 'int32', 0, 'ieee-be');   %0 0 234 96 -> 60000
numRows = fread(FID, 1, 'int32', 0, 'ieee-be');      %0 0 0 28 -> 28
numCols = fread(FID, 1, 'int32', 0, 'ieee-be');        %0 0 0 28 -> 28

%读取大小为28*28的图片
images = fread(FID, inf, 'unsigned char'); %sizeA  输出数组的维度有3种参数,Inf、n、[m,n],Inf 代表输出数据是列向量,文件中每一个元素对应一个值
images = reshape(images, numCols, numRows, numImages);
images = permute(images,[2 1 3]);%交换第一维和第二维,相当于转置;因为图片是反的所以需要翻转一下

fclose(FID);

end

readMNISTLabels.m - 读取数据集中的标签

function labels = readMNISTLabels(filename)
%
%功能:读取MNIST数据集中的标签
%
%Input:
%filename - 文件名
%
%Output:
%labels - 读取的标签(1*标签数)

fid = fopen(filename,'r');

%读取前八字节
magic = fread(fid,1,'int32',0,'ieee-be');
%或
% magic = fread(fid,4);
% magic = ((magic(1)*256 + magic(2))*256+magic(3))*256 + magic(4);
numLabels = fread(fid,1,'int32',0,'ieee-be');

%读取标签
labels = fread(fid,Inf,'unsigned char');
labels = labels';

fclose(fid);

end

数据格式(见 MNIST数据集网址)

MNIST数据集转为matlab可读的mat格式_第1张图片

MNIST数据集转为matlab可读的mat格式_第2张图片

 MNIST数据集下载:https://download.csdn.net/download/u012654981/10992769

mat格式的MNIST数据集下载:https://download.csdn.net/download/u012654981/10992779

你可能感兴趣的:(数据集读取)