python 读取 MNIST 数据集,并解析为图片文件

本文介绍了如何使用Python读取MNIST手写数字识别数据集,解析其二进制文件,并将图像数据转换为numpy矩阵,最终利用cv2模块保存为图片文件,按照标签分类存储。
摘要由CSDN通过智能技术生成

python 读取 MNIST 数据集,并解析为图片文件

MNIST 是 Yann LeCun 收集创建的手写数字识别数据集,训练集有 60,000 张图片,测试集有 10,000 张图片。数据集链接为:http://yann.lecun.com/exdb/mnist/。数据集下载解压后有4个二进制 IDX 文件:

train-images-idx3-ubyte: 训练集图片
train-labels-idx1-ubyte: 训练集标签 
t10k-images-idx3-ubyte:  测试集图片
t10k-labels-idx1-ubyte:  测试集标签

其中图像文件的数据格式为:

TRAINING SET IMAGE FILE (train-images-idx3-ubyte):
[offset] [type]          [value]          [description] 
0000     32 bit integer  0x00000803(2051) magic number 
0004     32 bit integer  60000            number of images 
0008     32 bit integer  28               number of rows 
0012     32 bit integer  28               number of columns 
0016     unsigned byte   ??               pixel 
0017     unsigned byte   ??               pixel 
........ 
xxxx     unsigned byte   ??               pixel

文件头信息包含 4 个 unsinged int32 整型数据,分别是 魔数、图片数、图片宽度、图片长度。后面的数据是所有图像的像素的,每个byte一个像素点。图片的长宽都是 28,所以每张图片长度为 28*28。像素值取值范围是 0~255。

可以使用 python 的 struct 模块读取二进制数据,将图像像素转为 numpy 矩阵,因而可以使用下面的函数解析图像数据:

import struct
import numpy as np

def decode_idx3_ubyte(idx3_ubyte_file):
    with open(idx3_ubyte_file, 'rb') as f:
        print('解析文件:', idx3_ubyte_file)
        fb_data = f.read()

    offset = 0
    fmt_header = '>iiii'    # 以大端法读取4个 unsinged int32
    magic_number, num_images, num_rows, num_cols = struct.unpack_from(fmt_header, fb_data, offset)
    print('魔数:{},图片数:{}'.format(magic_number, num_images
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值