手写数字识别的数据集讲解

CLASS torchvision.datasets.MNIST(root: str, train: bool = True, transform: Optional[Callable] = None, target_transform: Optional[Callable] = None, download: bool = False)

  • root (string): 表示数据集的根目录,其中根目录存放MNIST/processed/training.pt和MNIST/processed/test.pt的子目录
  • train (bool, optional): 如果为True,则从training.pt创建数据集,否则从test.pt创建数据集
  • download (bool, optional): 如果为True,则从internet下载数据集并将其放入根目录。如果数据集已下载,则不会再次下载
  • transform (callable, optional): 接收PIL图片并返回转换后版本图片的转换函数
    target_transform (callable, optional): 接收PIL接收目标并对其进行变换的转换函数

在这里插入图片描述
文件下载地址:官网
http://yann.lecun.com/exdb/mnist/
Mnist数据集包括4个文件
train-images-idx3-ubyte.gz: 训练集图像(9912422 bytes)
train-labels-idx1-ubyte.gz: 训练集标签 (28881 bytes)
t10k-images-idx3-ubyte.gz: 测试集图像 (1648877 bytes)
t10k-labels-idx1-ubyte.gz: 测试集标签 (4542 bytes)

gz为压缩文件,首先要解压这些文件idx3的数字表示数据维度,即图像为3维,标签是1维的
图像的3个维度分别为:
训练集图像28pix28pix60000张
测试集图像28pix28pix10000张
MNIST的格式解析
在这里插入图片描述
首先,offset是偏置,实际上就是一个标号,记录这个字段起始位置在这串数据的第几个字节。拿第一行举例子,从0000的位置开始,(这个0000是16进制,每个16进制位表示是4bit),从0000开始到0003结束,实际上是4字节 = 32bit,所以可以看到这个offset字段的数据类型type是32位整数。这个字段数据为0000 0801 用十进制来说就是2049。description是这个字段数据的含义,这个字段存放的801(也就是十进制2049),意思是魔数(magic number),大概就是确定数据类型的一个标志,是随便设定的
参考博客
对于标签文件
用sublime打开这个ubyte文件
在这里插入图片描述
第一个数据为32位,读取前32bit, 00000801,因为里面的数是16进制的,即一位代表4bit
第二个数据也是32位,接着读32bit, 0000ea60(十进制为60000,即训练集有60000张图片)
从第三个数据开始,就是真正要用的标签了。类型是无符号数,是1个字节,即8bit,往后读两个数字,即05,可以看出这一行数据存放的标签为5, 0, 4, 1, 9, 2, 1, 3

对于图像数据文件
在这里插入图片描述
在这里插入图片描述
第一个数据为32位,读取前32bit, 00000803,因为里面的数是16进制的,即一位代表4bit
第二个数据也是32位,接着读32bit, 0000ea60(十进制为60000,即训练集有60000张图片)
第三个数据也是32位,接着读32bit, 0000001c(十进制为28,即图片的行为28pix)
第四个数据也是32位,接着读32bit, 0000001c(十进制为28, 即图片的列为28pix)
每个无符号数表示一个像素,可以根据description看出,图像是2828的,往后每2828个像素位为一幅图像。读取出来是一行数据,之后恢复成方形矩阵就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值