MNIST 数据集解析和代码实现

首先MNIST数据集主要分为4个部分,分别是:

t10k-images-idx3-ubyte		test image (10,000)
t10k-labels-idx1-ubyte		test label (10,000)
train-images-idx3-ubyte		train image (60,000)
train-labels-idx1-ubyte		train label (60,000)

官网链接:
http://yann.lecun.com/exdb/mnist

首先下载数据,用urllib.request.urlretrieve下载数据,然后读取数据,并将其转换成 npy file:

import urllib

MNIST_URL = 'http://yann.lecun.com/exdb/mnist'
MNIST_FLOAT_TRAIN = 'train-images-idx3-ubyte'
DATA_DIR = 'dataset'

urllib.request.urlretrieve(url=f'{MNIST_URL}/{MNIST_FLOAT_TRAIN}.gz', filename=local_filename + '.gz')
with gzip.open(local_filename + '.gz', 'rb') as f:
   	file_content = f.read()
with open(local_filename, 'wb') as f:       # byte data
    f.write(file_content)

读取出来的数据的第一个四字节(int) 是magic number (例如Ox0000 0801),第二,三,四字节分别是image numbers, image height, image weight,知道结构后便可以开始解析MNIST数据集了。

with open(local_filename, 'rb') as f:
    f.seek(4)	# skip magic number 
    nimages, rows, cols = struct.unpack('>iii', f.read(12))		# 大端读取3个4字节,i表示int,4字节
    dim = rows * cols

    images = np.fromfile(f, dtype=np.dtype(np.ubyte))
    images = (images / 255.0).astype('float32').reshape((nimages, dim))

这样就可以得到 nimages 个 image了。其他文件的解析大同小异,可自行思考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值