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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 详解Android布局中gravity与layout_gravity属性[通俗易懂]

    详解Android布局中gravity与layout_gravity属性[通俗易懂]在android布局中,我们经常会用到“重心”-gravity这个属性。但是gravity有不同的类型:gravitylayout_gravity相对布局中的layout_center等属性今天我们就来具体说说。1、gravitygravity属性是对控件自身内容对自己的限定,拿布局文件test.xml举例来说:此时在TextView中并没有对gravity属性进行操作,文字内容如上图。接下

    2022年7月13日
    14
  • 1.2.太极平台框架简介

    1.2.太极平台框架简介1、太极平台框架简介太极平台框架,是专为制作管理后台系统而开发的一个框架。使用该框架,可以非常快速的搭建后台管理系统。针对于列表、以及增删改查这种通用的功能,太极框架只需要配置列表有哪些字段,以及这些字段的一些属性,就能创建出一个增删改查的功能。不需要编写任何代码即可完成。列表功能可设置字段的各种显示效果,自动格式化各种类型的字段数据。比如只需要设置字段为搜索项,就自动拥有搜索功能。添…

    2022年6月4日
    63
  • ***codeigniter操作xml(Simplexml第三方扩展)

    ***codeigniter操作xml(Simplexml第三方扩展)

    2021年9月4日
    46
  • java基础-云服务器购买

    java基础-云服务器购买小伙伴们,你们好呀!我是老寇!3年前,在阿里云买了我人生中的第一台云服务器,二话没说直接下单,看着支付宝的余额,我心如刀绞。所幸的是我熬过了这一个月。接下来我们进入正题(以阿里云为例)!目录一、操作步骤一、操作步骤1.输入阿里云网址,点击账号登录2.扫码登录->强烈建议下个阿里云APP,这样每次登陆只需要扫一扫就可以3.点击控制台,进入控制台4.完成实名认证(略)5.点击最新活动,找到开发者成长计划6.认准ECS服务器7.买Cento

    2022年5月5日
    41
  • Activity工作流:流程创建总结

    Activity工作流:流程创建总结Activiti工作流的应用示例1、新建流程模型模型管理->模型工作区点击“创建”后会立即跳转到“流程在线设计器”页面,请参考下一节2、在线流程设计器模型管理->模型工作区->编辑3、设置流程属性l名称:流程定义名称l描述信息:流程定义描述l流程标识:流程定义KEY,对应procDefKey,用来标识一个流程4、拖拽元素介…

    2022年5月23日
    31
  • 万方数据知识平台 TFHpple +Xpath解析[通俗易懂]

    万方数据知识平台 TFHpple +Xpath解析

    2022年1月23日
    34

发表回复

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

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