关于读取及使用MNIST数据集

一、下载

推荐网盘下载,不用代码下载。不然太慢。

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.csdn.net/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, 28)
size: 47040000

每个像素点由灰度值表示([0-255]),格式<class 'numpy.float64'>。

例如train_images[0]的像素值如下所示:

[[  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
    0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
    0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
    0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
    0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
    0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   3.  18.
   18.  18. 126. 136. 175.  26. 166. 255. 247. 127.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.  30.  36.  94. 154. 170. 253.
  253. 253. 253. 253. 225. 172. 253. 242. 195.  64.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.  49. 238. 253. 253. 253. 253. 253.
  253. 253. 253. 251.  93.  82.  82.  56.  39.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.  18. 219. 253. 253. 253. 253. 253.
  198. 182. 247. 241.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.  80. 156. 107. 253. 253. 205.
   11.   0.  43. 154.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.   0.  14.   1. 154. 253.  90.
    0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0. 139. 253. 190.
    2.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.  11. 190. 253.
   70.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.  35. 241.
  225. 160. 108.   1.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.  81.
  240. 253. 253. 119.  25.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
   45. 186. 253. 253. 150.  27.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
    0.  16.  93. 252. 253. 187.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
    0.   0.   0. 249. 253. 249.  64.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
   46. 130. 183. 253. 253. 207.   2.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.  39. 148.
  229. 253. 253. 253. 250. 182.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.  24. 114. 221. 253.
  253. 253. 253. 201.  78.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.  23.  66. 213. 253. 253. 253.
  253. 198.  81.   2.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.  18. 171. 219. 253. 253. 253. 253. 195.
   80.   9.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.  55. 172. 226. 253. 253. 253. 253. 244. 133.  11.
    0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0. 136. 253. 253. 253. 212. 135. 132.  16.   0.   0.
    0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
    0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
    0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]
 [  0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
    0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.]]

训练数据的图像标签train_labels

例如train_labels[0],为一个浮点数(5.0),而不是向量。

四、通道数、RGB、灰度值、像素值等关系

通道数是指每个像素点用多少个数值表示。MNIST使用的是灰度图像,每个像素点只需要一个数值,因此这里通道数为1。如果是RGB图像,就需要三个数值,通道数就是3。

 灰度就是没有色彩,RGB色彩分量全部相等。例如,一个256级灰度的图象,RGB(100,100,100)就代表灰度为100。灰度是指黑白图像中点的颜色深度,范围一般从0到255,白色为255 ,黑色为0。

RGB: 任何颜色都有红R、绿G、蓝B三原色组成。彩色图象的灰度其实在转化为黑白图像后的像素值(是一种广义的提法),转化的方法看应用的领域而定,一般按加权的方法转换,R , G ,B 的比一般为3:6:1。

RGB转换为灰度值:

所以,如果对于一张本身就是灰度图像(8位灰度图像)来说,他的像素值就是它的灰度值,如果是一张彩色图像,则它的灰度值需要经过函数映射来得到。

像素值:对于黑白图像,每个像素通常用一个字节数据来表示;对应得,在彩色图像中,每个像素需用三个字节数据来表述。

 

补充知识(可能会用到):

pytorch中的torchvision.transforms.ToTensor()将numpy的ndarray或PIL.Image读的图片转换成形状为(C,H, W)的Tensor格式,且255归一化到[0,1.0]之间(即整个矩阵除以255.0)。其中H、W、C分别表示图像的高、宽和通道数,通道数一般为RGB三通道。而中用到的方法,提取的出来image的格式是(N, H, W),或许是因为灰度图通道数为1,所以C就不需要存在。
一个Batch的图像数据shape为[样本数N, 通道数C, 高度H, 宽度W],将其最后两个维度flatten,得到的是[N, C, H*W],标准的Batch Normalization就是在通道Channel这个维度上进行移动,对所有样本的所有值求均值和方差,有几个通道,得到的就是几个均值和方差(MNIST的话,通道数为1,也是就只有一个均值和方差)。

 

 

 

 

 

 

参考链接:

https://blog.csdn.net/panrenlong/article/details/81736754

https://blog.csdn.net/lison_zhu/article/details/97134973

https://www.jianshu.com/p/83916d7dad5b

https://www.jianshu.com/p/f3c9ce8c0f20

https://blog.csdn.net/aLWX_hust/article/details/86591783

http://www.360doc.com/content/20/0213/14/68563867_891712939.shtml

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值