一、下载
推荐网盘下载,不用代码下载。不然太慢。
MNIST数据集包含四个压缩包,后两个是用于训练(分为images和labels),前两个用于测试(同样分为images和labels)。其中内容是不可读的:如。
其中,训练样本总共有60000个,包括55000用于训练,5000用于验证。对应得,有60000个标签(0-9);
测试样本有10000个。
二、读取数据集的像素值
1、使用python读取二进制文件方法读取mnist数据集(open(rb)),则读进来的图像像素值为0-255之间;标签是0-9的数值。
2、使用tensorflow或pytorch封装的语句来读取,则可能读进来的图像像素值为0-1之间;标签是0-1值组成的大小为1*10的行向量。
三、读取二进制方法读取MNIST(本文不考虑tf或pytorch读取的情况)
使用python的open()和struct.unpack_from()函数操作,【注意:此方法需要将下载的压缩文件解压之后才有使用】
见https://blog.youkuaiyun.com/panrenlong/article/details/81736754
ps.关于struct的pack和unpack
import struct
struct.pack用于将Python的值根据格式符,转换为字符串(因为Python中没有字节(Byte)类型,可以把这里的字符串理解为字节流,或字节数组)。格式:struct.pack(fmt, v1, v2, ...),参数fmt是格式字符串。
struct.unpack做的工作刚好与struct.pack相反,用于将字节流转换成python数据类型。函数返回的是一个元组(x,x,..)。
这里的struct.unpack_from类似
ps.end
读取流程:
读取结果:
例如训练数据的图像样本train_images
number of dim: 3
shape: (60000, 28