MNIST数据集介绍

本文介绍了MNIST数据集的来源、结构和用途,并提供了使用MATLAB将idx3-ubyte格式转换为.jpg图片的代码示例。同时,详细阐述了如何将自己的.png图片数据转换为MNIST标准的idx3-ubyte格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MNIST数据集介绍

MNIST 数据集来自美国国家标准与技术研究所, National Institute of Standards and Technology (NIST). 训练集 (training set) 由来自 250 个不同人手写的数字构成, 其中 50% 是高中学生, 50% 来自人口普查局 (the Census Bureau) 的工作人员. 测试集(test set) 也是同样比例的手写数字数据。

训练集中包含60000个样本,测试集中包含10000个样本。
MNIST数据集的官方网站
解压后共有4个文件:

文件名 内容
t10k-images 10000张测试图片(1 611kb)
t10k-labels 测试集图片对应的标签(29kb)
train-images 55000张训练集图片和5000张验证集图片(9 681 kb)
train-labels 训练集图片对应的标签(5kb)

idx3的数字表示数据维度。也就是图像为3维,标签维1维。
图像的3个维度分别为:训练集图像28pix28pix60000张 测试机 28pix28pix10000张。
官网上的MNIST训练集标签:
训练及标签解析
首先,offset是偏置,实际上就是一个标号,记录这个字段起始位置在这串数据的第几个字节。拿第一行举例子,从0000的位置开始,(这个0000是16进制,每个16进制位表示是4bit),从0000开始到0003结束,实际上是4字节 = 32bit,所以可以看到这个offset字段的数据类型type是32位整数。这个字段数据为0000 0801 用十进制来说就是2049。
训练集图片数据
训练集图片解析
每一个无符号数表示一个像素,根据description看出,图像大小为2828。往后每2828个像素为一幅图像,直接读取出来是一行数据,之后可以再恢复成方形矩阵。

读取MNIST数据

将MNIST数据转化成jpg格式程序
matlab程序main.m

clear
clc
%% 首先将ubyte格式文件转化成常用的.mat文件格式
filename = ‘./train-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,rowscolums);
for i = 1:NumberofImages
temp = fread(FID,(rows
colums), ‘uchar’);
test_x(i,:) = temp’;
end
save(savePath,‘test_x’)
%%将.mat文件转化为jpg格式
for j = 1:1:NumberofImages
b = test_x(j,:); %每次读取一行数据
D = reshape(b,128,128);
sc=strcat(‘E:\based_deeplearning_image_classification\chengxu\data_2_mnist\result\train-images-idx3-ubyte’,sprintf(’%d’,j)); %命名保存
Sc=strcat(sc,’.jpg’);
imwrite(D,Sc);
end

readint32.m

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

用自己的图片数据生成idx3-ubyte格式的数据集

在程序中,我把每一步的输出都打印出来,以便说明每一步的作用。
首先定义一个二维数组Names,分别用来存放输入,输出的路径和标签。这里输入的是相对路径。
前期准备,将自己的数据集每一类存放在各自的文件夹中,文件夹分别以1, 2, 3, 4…命名,全部放在./training-images目录下。
接着看每一段程序的功能。

Names = [['./training-images','train'], ['./test-images','test']]
for name in Names:
    data_image = array('B')
    data_label = array('B')
    FileList = []

遍历Names中的元素, 并定义存放图片信息的序列data_image和存放标签信息的序列data_label。再定义一个空的数组FileList。

用循环逐层遍历,直到读取.png格式的图片。

    for dirname in os.listdir(name[0])
        path = os.path.join(name[0], dirname)
        print('path', path)
        for filename in os.listdir(path):
            if filename.endswith(".png"):    
                FileList
Mnist数据集是一个广泛使用的手写数字数据集,用于深度学习模型的分类和识别任务。这个数据集包含了一万个来自中国的公民书写的手写数字图像。每个参与者用标准黑色墨水笔在一张表格中写下了所有的15个数字。Mnist数据集是在纽卡斯尔大学的一个项目框架内收集的。目前,许多深度学习框架都已经内置了Mnist数据集,并提供了相关的函数来读取和划分数据集。对数据集进行详细的解读对于理解和应用Mnist数据集是非常有必要的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Mnist数据集简介](https://blog.youkuaiyun.com/tony_vip/article/details/118735261)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Chinese MNIST数据集](https://download.youkuaiyun.com/download/PeterClerk/87747553)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [从手写数字识别入门深度学习MNIST数据集详解](https://blog.youkuaiyun.com/OpenDataLab/article/details/125716623)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值