matlab读取mnist数据集(c语言从文件中读取数据)

mnistdatabase(手写字符识别)的数据集下载地:http://yann.lecun.com/exdb/mnist/。准备数据MNIST是在机器学习领域中的一个经典问题。该问题解决的是把28×28像素的灰度手写数字图片识别为相应的数字,其中数字的范围从0到9.共有四个文件需要下载:train-images-idx3-ubyte.gz,训练集,共60,000幅(28*28)的图像数据…

大家好,又见面了,我是你们的朋友全栈君。

mnist database(手写字符识别) 的数据集下载地:http://yann.lecun.com/exdb/mnist/

准备数据

MNIST是在机器学习领域中的一个经典问题。该问题解决的是把28×28像素的灰度手写数字图片识别为相应的数字,其中数字的范围从0到9.

共有四个文件需要下载:

  • train-images-idx3-ubyte.gz,训练集,共 60,000 幅(28*28)的图像数据;
  • train-labels-idx1-ubyte.gz,训练集的标签信息(取值为 0-9),60,000*1
  • t10k-images-idx3-ubyte.gz,测试集(t: test, 10k: 10,000),共 10,000 副(28*28)的图像数据
  • t10k-labels-idx1-ubyte.gz,测试集的标签呢信息(取值为 0-9),10,000*1
  • 更多详情, 请参考 Chris Olah’s visualizations of MNIST.

文件名中的 ubyte 表示数据类型,无符号的单字节类型,对应于 matlab 中的 uchar 数据类型。

注:在 Windows 平台下解压这些文件时,操作系统会自动修改这些文件的文件名,比如会将倒数第二个短线-修改为.,也即 train-images-idx3-ubyte.gz 解压为train-images.idx3-ubyte(文件类型就自作主张地变成了idx3-ubyte),注意文件的对应。

数据格式 


这里写图片描述


数据格数如图所示,即在真正的 label 数据或图像像素信息开始之前会有一些表头信息,对于 label 文件是 2 个 32位整型,对于 image 文件是 4 个 32位整型,所以我们需要对这两个文件分别移动文件指针,以指向正确的位置

由于matlab中fread函数默认读取8位二进制数,而原数据为32bit整型且数据为16进制或10进制,因此直接使用fread(f,4)或者fread(f,’uint32′)读出数据均是错误数据,下面给出一种解决方案:通过将其转化为二进制,通过字符串拼接后再转化为十进制。

function [getdata]=readint32(FID)
    data = [];
    for i = 1:4
            f=fread(FID,1);
            data = strcat(data,num2str(dec2base(f,2,8)));
    end
    getdata = bin2dec(data);

end

数据读取与保存

image数据:

首先读取4个数据,分别是MagicNumber=2051,NumberofImages=6000,rows=28,colums=28,然后每读取rows×colums个数表示一张图片进行保存。

clear
clc
filename = './t10k-images-idx3-ubyte';
savename = './test_x';
FID = fopen(filename,'r');

MagicNumber=readint32(FID);
NumberofImages=readint32(FID);
rows=readint32(FID);
colums=readint32(FID);


savePath = [savename,'.mat'];
test_x = zeros(NumberofImages,rows*colums);
for i = 1:NumberofImages
            temp = fread(FID,(rows*colums), 'uchar');
            test_x(i,:) = temp';
end
save(savePath,'test_x')

label数据:

label数据读取与保存与image类似,区别在于只有MagicNumber=2049,NumberofImages=6000,然后每行读取的数据范围为0~9,因此令temp+1列为1,其余为0即可。

clear
clc
filename = './train-labels-idx1-ubyte';
savename = './train_y';
FID = fopen(filename,'r');

MagicNumber=readint32(FID);
NumberofImages=readint32(FID);


savePath = [savename,'.mat'];
train_y = zeros(NumberofImages,10);
for i = 1:NumberofImages
            temp = fread(FID,1);
            train_y(i,temp+1) = 1;
end
save(savePath,'train_y')

读者下载好数据后,将下列程序分别保存为m文件,只需更改程序里的filename,savename,变量名train_y/train_x/test_x/test_yh和保存save里的变量名即可

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127275.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 西门子scl语言和c语言,西门子PLC的SCL语言与STL语言比较一下-工业支持中心-西门子中国…「建议收藏」

    西门子scl语言和c语言,西门子PLC的SCL语言与STL语言比较一下-工业支持中心-西门子中国…「建议收藏」1.STL有点类似汇编语言,和机器码对应,无论哪种语言写的PLC程序都可以转换成STL查看,所以掌握基本的STL指令和语法是很有帮助的。另外STL直接操作寄存器,实现同样功能时可以减少运算量和寄存器调用次数,并且只关心数据类型的长度(例如不区分int和word),减少了数据类型转换,总的来说执行效率高,但实现复杂运算和逻辑时编程繁琐。2.SCL类似于高级语言Pascal、C之类,可以通过简单的语…

    2022年10月7日
    0
  • 快速上手Linux玩转典型应用

    快速上手Linux玩转典型应用

    2022年2月18日
    36
  • PLSQL详细使用教程及下载地址「建议收藏」

    PLSQL详细使用教程及下载地址「建议收藏」Oracle数据库连接必备,大公司玩转oracle数据库必备,虽然现在已经都用MYSQL替换了,但是不可否认这款软件的实力。中文版还具有语法加强、SQL和PL/SQL帮助、对象描述等功能特性。下载地址:http://kk04.cn/f-6339.html详细使用教程:http://kk04.cn/f-6342.html…

    2022年5月2日
    48
  • Mac环境变量的配置

    Mac环境变量的配置Mac系统下进行PATH配置1.打开配置文件vi ~/.bash_profile2.编辑配置文件export路径名=/Users/…/PATH=$路径名:$PATH 3.保存配置文件终端:键入esc键终端:输入:wq,退出4.立即生效终端:键入source ~/.bash_profile测试配置是否成功…

    2022年6月16日
    25
  • mybatis SqlSessionFactoryBean SqlSessionTemplate MapperScannerConfigurer

    mybatis SqlSessionFactoryBean SqlSessionTemplate MapperScannerConfigurermybatis SqlSessionFactoryBean SqlSessionTemplateMapperScannerConfigurer1.MyBatis简介   MyBatis是什么?MyBatis是一款一流的支持自定义SQL、存储过程和高级映射的持久化框架。MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去设置参数和获取检索结果。MyBatis能

    2022年5月20日
    36
  • 【mysql】mysql删除重复记录并且只保留一条

    【mysql】mysql删除重复记录并且只保留一条目录一、单个字段的操作分组介绍:1.查询全部重复的数据:2.删除全部重复试题:3.查询表中多余重复试题(根据depno来判断,除了rowid最小的一个)a.第一种方法:b.第二种方法:c.补充第三种方法(根据评论区给的删除总结出来的):4.删除表中多余重复试题并且只留1条:a.第一种方法:b.☆第二种方法(与上面查询的第二种方法对应,只…

    2022年6月24日
    54

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号