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数据集下载:https://download.csdn.net/download/u012654981/10992769

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

  • 6
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值