制作MNIST数据格式文件

简介: 教你如何制作MNIST数据集!

什么是MNIST数据集

MNIST数据集是大牛们制作常用学习的手写数字图片文件,是二进制文件(idx文件格式),里面包含了所有图片信息,包括图片数目,图片大小,具体内容可到官方查看
里面有两类,一类是训练集,另一类是测试集,就是有两批不同的图片而已


Alt text

MNIST-IDX文件格式解析

因为MNIST是手写数字图片,所以会包括图片和对应的标签,也就是每一张图片都会对应一个具体数字,还是监督学习,所以需要数据和对应标签,例如:第一张图片是数据存放在idx3-ubyte里面,但是机器不知道它是几,所以需要给它一个标签确定它是数字几,所以需要另一个文件idx1-ubyte这个里面存放的是和图片对应的标签,当然顺序都是一一对应的

IDX3

  • 第一个4 字节:文件标志
  • 第二个4 字节:图片张数
  • 第三个4 字节:图片宽度
  • 第四个4 字节:图片高度
    后面都是数据,就是图片展开一行一行追加的数据

    Alt text

IDX1

  • 第一个4 字节:文件标志
  • 第二个4 字节:图片张数
    后面都是标签,就是每张图片对应的数字是什么

    Alt text

解析数据

自己解密MNIST数据集 []
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
def decode_idx3_ubyte(idx3_ubyte_file):
# 读取二进制数据
bin_data = open(idx3_ubyte_file, 'rb').read()

# 解析文件头信息,依次为标志、图片数量、每张图片宽、每张图片高
offset = 0
fmt_header = '>iiii'
magic_number, num_images, num_rows, num_cols = struct.unpack_from(fmt_header, bin_data, offset)
print ('标志:%d, 图片数量: %d张, 图片大小: %d*%d' % (magic_number, num_images, num_rows, num_cols))

# 解析数据集
image_size = num_rows * num_cols
offset += struct.calcsize(fmt_header)
fmt_image = '>' + str(image_size) + 'B'
images = np.empty((num_images, num_rows, num_cols))
for i in range(num_images):
if (i + 1) % 10000 == 0:
print ('已解析 %d' % (i + 1) + '张')
images[i] = np.array(struct.unpack_from(fmt_image, bin_data, offset)).reshape((num_rows, num_cols))
offset += struct.calcsize(fmt_image)
return images

def decode_idx1_ubyte(idx1_ubyte_file):
# 读取二进制数据
bin_data = open(idx1_ubyte_file, 'rb').read()

# 解析文件头信息,依次为标志和标签数
offset = 0
fmt_header = '>ii'
magic_number, num_images = struct.unpack_from(fmt_header, bin_data, offset)
print ('标志:%d, 图片数量: %d张' % (magic_number, num_images))

# 解析数据集
offset += struct.calcsize(fmt_header)
fmt_image = '>B'
labels = np.empty(num_images)
for i in range(num_images):
if (i + 1) % 10000 == 0:
print ('已解析 %d' % (i + 1) + '张')
labels[i] = struct.unpack_from(fmt_image, bin_data, offset)[0]
offset += struct.calcsize(fmt_image)
return labels

# 打印图片
train_images = load_train_images()
plt.imshow(train_images[i], cmap='gray')
plt.show()


Alt text

怎么制作自己的MNIST文件呢

看了上面的代码,我们只要把我们的文件内容按照以上格式填写进去即可,十分简单

×

谢谢支持

扫码支持
扫码打赏

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 什么是MNIST数据集
  2. 2. MNIST-IDX文件格式解析
    1. 2.0.1. IDX3
    2. 2.0.2. IDX1
    3. 2.0.3. 解析数据
  • 3. 怎么制作自己的MNIST文件呢
  • ,