MATLAB导入MNIST数据集报错:无法读取非二进制.mat文件求助
解决带噪声MNIST数据集加载失败的问题
我之前也碰到过类似的情况,直接改扩展名根本解决不了问题,得一步步排查:
先确认文件的真实格式:别着急改扩展名!你可以先在MATLAB里用
fread读取文件的前几个字节看看:fid = fopen('你的文件名', 'r'); header = fread(fid, 10, 'char'); fclose(fid); disp(char(header'));如果是标准MAT文件,开头会显示
MATLAB 5.0之类的字样;如果是MNIST原始的idx格式,开头是几个特定的整数(magic number)。要是啥都不像,可能是下载或解压出问题了。如果是MNIST原始idx格式:很多带噪声的MNIST变种都是基于原始idx文件修改的,不是MAT格式。你可以用专门的读取函数来处理,比如写两个小函数:
% 读取带噪声的MNIST图像和标签 function [images, labels] = read_noisy_mnist(img_path, lbl_path) % 读取图像文件 fid_img = fopen(img_path, 'rb'); % 跳过magic number、图像数量、行数、列数这4个int32字段 fread(fid_img, 4, 'int32', 0, 'b'); images = fread(fid_img, [28,28,inf], 'uint8'); images = permute(images, [2,1,3]); % 调整为符合视觉习惯的行优先排列 fclose(fid_img); % 读取标签文件 fid_lbl = fopen(lbl_path, 'rb'); % 跳过magic number和标签数量这2个int32字段 fread(fid_lbl, 2, 'int32', 0, 'b'); labels = fread(fid_lbl, inf, 'uint8'); fclose(fid_lbl); end然后直接调用这个函数读取你解压后的文件就行,不用改扩展名。
检查下载和解压环节:如果上面的方法都不行,试试重新下载数据集,换个解压工具(比如7-Zip),有时候系统自带的解压工具会损坏某些非标准格式的文件。另外再确认一下数据集的官方说明,是不是真的提供MAT格式,有时候文件说明可能标错了。
关于mnist helper函数失效:大部分mnist helper默认只处理标准的idx格式或者MAT格式的MNIST,如果你的数据集是自定义修改的带噪声版本,helper函数可能不兼容,得自己调整读取逻辑。
内容的提问来源于stack exchange,提问作者Bogorovich
相关产品推荐
相关产品推荐

