文章目录
MNIST数据集简介
MNIST是一个手写数字的数据库,它由一个包含有60000个样本的训练集和一个包含有10000个样本的测试集组成。数据集中所有的手写数字都已经被标准化,并且以固定大小的图像形式保存。
完整数据集可从MNIST数据集的官网THE MNIST DATABASE of handwritten digits上进行下载。
下载完成后,解压即可得到我们所需的数据集。
MNIST数据集文件格式
数据集用字节形式进行存储,采用MSB(Most Significant Bit) first模式,即大端模式。
MNIST数据集由四个文件组成:
| 文件名 | 说明 |
|---|---|
| train-images-idx3-ubyte | 训练集图片 |
| train-labels-idx1-ubyte | 训练集标签 |
| t10k-images-idx3-ubyte | 测试集图片 |
| t10k-labels-idx1-ubyte | 测试集标签 |
train-images-idx3-ubyte
| 字节偏移量 | 数据类型 | 数值 | 说明 |
|---|---|---|---|
| 0000 | 32 bit integer | 0x00000803(2051) | 魔数 |
| 0004 | 32 bit integer | 60000 | 图片数量 |
| 0008 | 32 bit integer | 28 | 图片像素的行数(row) |
| 0012 | 32 bit integer | 28 | 图片像素的列数(column) |
| 0016 | unsigned byte | ?? | 像素的值 |
| 0017 | unsigned byte | ?? | 像素的值 |
| … | … | … | … |
| xxxx | unsigned byte | ?? | 像素的值 |
像素按行排列。 像素值为0到255。0表示背景(白色),255表示前景(黑色)。
train-labels-idx1-ubyte
| 字节偏移量 | 数据类型 | 数值 | 说明 |
|---|---|---|---|
| 0000 | 32 bit integer | 0x00000801(2049) | 魔数 (MSB first) |
| 0004 | 32 bit integer | 60000 | 标签数量 |
| 0008 | unsigned byte | ?? | 标签值 |
| 0009 | unsigned byte | ?? | 标签值 |
| … | … | … | … |
| xxxx | unsigned byte | ?? | 标签值 |
标签的值为0到9的整数。
t10k-images-idx3-ubyte
| 字节偏移量 | 数据类型 | 数值 | 说明 |
|---|---|---|---|
| 0000 | 32 bit integer | 0x00000803(2051) | 魔数 |
| 0004 | 32 bit integer | 10000 | 图片数量 |
| 0008 | 32 bit integer | 28 | 图片像素的行数(row) |
| 0012 | 32 bit integer | 28 | 图片像素的列数(column) |
| 0016 | unsigned byte | ?? | 像素的值 |
| 0017 | unsigned byte | ?? | 像素的值 |
| … | … | … | … |
| xxxx | unsigned byte | ?? | 像素的值 |
像素按行排列。 像素值为0到255。0表示背景(白色),255表示前景(黑色)。
t10k-labels-idx1-ubyte
| 字节偏移量 | 数据类型 | 数值 | 说明 |
|---|---|---|---|
| 0000 | 32 bit integer | 0x00000801(2049) | 魔数 (MSB first) |
| 0004 | 32 bit integer | 10000 | 标签数量 |
| 0008 | unsigned byte | ?? | 标签值 |
| 0009 | unsigned byte | ?? | 标签值 |
| … | … | … | … |
| xxxx | unsigned byte | ?? | 标签值 |
标签的值为0到9的整数。
读取方法
open() 函数
文件以二进制格式进行存储,我们同样的也就需要用二进制格式进行读取。所以我们在使用Python的open()函数时,需指明模式为rb,即以二进制格式打开一个文件用于只读。
f = open(file_name, "rb")
open()将打开一个文件,创建一个file对象,这时调用相关方法便可以对文件进行读写。
file.read(size)
size

这篇博客介绍了MNIST手写数字数据集,包括其组成、文件格式和读取方法。通过Python的open()函数以二进制模式读取数据,结合int.from_bytes()和struct.unpack()函数进行数据转换,将数据集中的图像保存为图片。
最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



