ver0.83--readMNIST.m

%关于MNIST手写图像数据库的读取。
%输入:
%id - 图像的28x28大小单元格数组;
%n - 要处理的图像数;
%labels - 对应于图像的标签单元格数组;
%rand_on - 参数,定义是否需要随机选取一对图像/标签

%输出:
% I - 训练图像的28x28大小单元阵列
%labels - 训练集的标签矢量(真实数字)
%I_test - 测试图像的28x28大小单元格数组
%labels_test - 测试集的标签向量(真实数字)


function [I,labels,I_test,labels_test] = readMNIST(num)
%检查我们是否有MNIST数据集
path = './MNIST/train-images.idx3-ubyte';
if(~exist(path,'file'))
    error('Training set of MNIST not found. Please download it from http://yann.lecun.com/exdb/mnist/ and put to ./MNIST folder');
end

fid = fopen(path,'r','b');  %big-endian
magicNum = fread(fid,1,'int32');    
% “fread”以二进制形式,从文件读出数据。
if(magicNum~=2051) 
    display('Error: cant find magic number');
    return;
end
imgNum = fread(fid,1,'int32');  %Number of images
rowSz = fread(fid,1,'int32');   %Image height
colSz = fread(fid,1,'int32');   %Image width

if(num<imgNum) 
    imgNum=num; 
end

for k=1:imgNum
    I{k} = uint8(fread(fid,[rowSz colSz],'uchar'));%[M,N]:读出N个数据,构成列向量,填入M*N矩阵
end
fclose(fid);

%============Loading labels
path = './MNIST/train-labels.idx1-ubyte';
if(~exist(path,'file'))
    error('Training labels of MNIST not found. Please download it from http://yann.lecun.com/exdb/mnist/ and put to ./MNIST folder');
end
fid = fopen(path,'r','b');  %big-endian
magicNum = fread(fid,1,'int32');    %Magic number
if(magicNum~=2049) 
    display('Error: cant find magic number');
    return;
end
itmNum = fread(fid,1,'int32');  %Number of labels

if(num<itmNum) 
    itmNum=num; 
end
labels = uint8(fread(fid,itmNum,'uint8'));   %Load all labels

fclose(fid);

%============All the same for test set
path = './MNIST/t10k-images.idx';
if(~exist(path,'file'))
    error('Test images of MNIST not found. Please download it from http://yann.lecun.com/exdb/mnist/ and put to ./MNIST folder');
end

fid = fopen(path,'r','b');  
magicNum = fread(fid,1,'int32');    
if(magicNum~=2051) 
    display('Error: cant find magic number');
    return;
end
imgNum = fread(fid,1,'int32');  
rowSz = fread(fid,1,'int32');   
colSz = fread(fid,1,'int32');   

if(num<imgNum) 
    imgNum=num; 
end

for k=1:imgNum
    I_test{k} = uint8(fread(fid,[rowSz colSz],'uchar'));
end
fclose(fid);

%============Test labels
path = './MNIST/t10k-labels.idx1-ubyte';
if(~exist(path,'file'))
    error('Test labels of MNIST not found. Please download it from http://yann.lecun.com/exdb/mnist/ and put to ./MNIST folder');
end

fid = fopen(path,'r','b');  
magicNum = fread(fid,1,'int32');    
if(magicNum~=2049) 
    display('Error: cant find magic number');
    return;
end
itmNum = fread(fid,1,'int32');  
if(num<itmNum) 
    itmNum=num; 
end
labels_test = uint8(fread(fid,itmNum,'uint8'));   

fclose(fid);

如果输入为1000,就是1000张用于训练,1000张用于测试??

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值