如何在Matlab中使用.idx3文件?

时间:2012-08-31 18:16:13

标签: matlab

我使用Matlab进行OCR项目,我发现有一个名为MNIST手写数字数据库的字符样本数据库。我下载名为train-images.idx3-ubyte的文件,但我不知道如何使用它吗知道如何使用这个文件吗?

3 个答案:

答案 0 :(得分:2)

您可以使用斯坦福大学的mnistHelper functions

  

作为如何使用这些功能的示例,您可以使用以下代码检查图像和标签:

% Change the filenames if you have saved the files under different names
% On some platforms, the files might be saved as 
% train-images.idx3-ubyte / train-labels.idx1-ubyte

images = loadMNISTImages('train-images-idx3-ubyte');
labels = loadMNISTLabels('train-labels-idx1-ubyte');

% We are using display_network from the autoencoder code

display_network(images(:,1:100)); % Show the first 100 images
disp(labels(1:10));

答案 1 :(得分:1)

从MNIST数据库下载的文件是二进制文件。您可以在MNIST网站上找到他们的格式:http://yann.lecun.com/exdb/mnist/

在MATLAB中使用low-level file I/O函数,例如fopenfclosefreadfseek等,按照格式读取文件。

您还可以尝试使用FileExchange中的readMNIST函数。我对它没有任何经验,有些用户似乎遇到了一些问题,但你可以看到代码并进行调试。

答案 2 :(得分:0)

You Can read MNISTImages like this-

trlblid = fopen('train-labels.idx1-ubyte');    
trimgid = fopen('train-images.idx3-ubyte');    
tslblid = fopen('t10k-labels.idx1-ubyte');    
tsimgid = fopen('t10k-images.idx3-ubyte');    

% read train labels    
fread(trlblid, 4);    
numtrlbls = toint(fread(trlblid, 4));    
trainlabels = fread(trlblid, numtrlbls);    

% read train data    
fread(trimgid, 4);    
numtrimg = toint(fread(trimgid, 4));    
trimgh = toint(fread(trimgid, 4));    
trimgw = toint(fread(trimgid, 4));    
trainimages = permute(reshape(fread(trimgid,trimgh*trimgw*numtrimg),trimgh,trimgw,numtrimg), [2 1 3]);    

% read test labels    
fread(tslblid, 4);    
numtslbls = toint(fread(tslblid, 4));    
testlabels = fread(tslblid, numtslbls);    

% read test data    
fread(tsimgid, 4);    
numtsimg = toint(fread(tsimgid, 4));    
tsimgh = toint(fread(tsimgid, 4));    
tsimgw = toint(fread(tsimgid, 4));    
testimages = permute(reshape(fread(tsimgid, tsimgh*tsimgw*numtsimg),tsimgh,tsimgw,numtsimg), [2 1 3]);