mnist数据集下载(mnist)
-作者:飞机E族 -你们好,最近小时发现有诸多的小伙伴们对于mnist数据集下载,mnist这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。
1、 MNIST数据集可以在官方网站获得,它包含四个部分:
2、 :train-images-idx 3-ubyte . gz(9.9 MB,解压后47 MB,包含60,000 个样本)
3、 :train-labels-idx 1-ubyte . gz(29kb,解压后60 KB,包含60,000 个标签)
4、 :t10k-images-idx3-ubyte.gz(1.6 MB,解压缩后为7.8 MB,包括10,000个样本)
5、 :t10k-labels-idx1-ubyte.gz(5kb,解压缩后为10 KB,包括10000个标签)
6、 MNIST的数据集来自国家标准和技术研究所(NIST)。训练集由250个不同人的手写数字组成,其中50%是高中生,50%来自人口普查局的工作人员。测试集也是相同比例的手写数字数据。
7、 你不妨新建一个文件夹-mnist,把数据集下载到mnist,解压:
8、 图片以字节存储,需要读入NumPy数组来训练和测试算法。
9、 import os
10、 import struct
11、 import numpy as np
12、 def load_mnist(path, kind='train'):
13、 '''Load MNIST data from `path`'''
14、 labels_path=os.path.join(path,
15、 '%s-labels-idx1-ubyte'
16、 % kind)
17、 images_path=os.path.join(path,
18、 '%s-images-idx3-ubyte'
19、 % kind)
20、 with open(labels_path, 'rb') as lbpath:
21、 magic, n=struct.unpack('II',
22、 lbpath.read(8))
23、 labels=np.fromfile(lbpath,
24、 dtype=np.uint8)
25、 with open(images_path, 'rb') as imgpath:
26、 magic, num, rows, cols=struct.unpack('IIII',
27、 imgpath.read(16))
28、 images=np.fromfile(imgpath,
29、 dtype=np.uint8).reshape(len(labels), 784)
30、 return images, labels
31、 load_mnist函数返回两个数组。第一个是具有n x m维的NumPy数组(图像),其中n是样本(行)的数量,m是特征(列)的数量。训练数据集包含60,000个样本,测试数据集包含10,000个样本。MNIST数据集中的每张图片由2828个像素组成,每个像素用一个灰度值表示。在这里,我们将28 x 28像素扩展为一维行向量,即图片数组中的行(每行有784个值,或者每行代表一张图片)。load_mnist函数返回的第二个数组。
32、 如果我们第一次见面,可能会觉得我们看图的方式有点奇怪:
33、 magic, n=struct.unpack('II', lbpath.read(8))
34、 labels=np.fromfile(lbpath, dtype=np.uint8)
35、 要理解这两行代码,我们先来看看MNIST网站上对数据集的介绍:
36、 TRAINING SET LABEL FILE (train-labels-idx1-ubyte):
37、 [offset] [type] [value] [description]
38、 0000 32 bit integer0x00000801(2049) magic number (MSB first)
39、 0004 32 bit integer 60000 number of items
40、 0008 unsigned byte ? label
41、 0009 unsigned byte ? label
42、 .
43、 xxxx unsigned byte ? label
44、 The labels values are 0 to 9.
45、 通过使用上面两行代码,在调用fromfile方法将字节读入NumPy数组之前,我们首先读入magic number,它是一个文件协议的描述和文件缓冲区中的项数(n)。II作为参数值传入struct.unpack有两部分:
46、 1.这里指的是大端(用来定义字节如何存储);如果你不知道什么是大终端,什么是小终端,Endianness就是一个非常好的解释。(有关大型和小型终端的更多信息,请参见了解计算机系统-第2.1节信息存储。)
47、 2.I:这是指一个无符号整数。
48、 通过执行下面的代码,我们将在提取MNIST数据集之后,从目录mnist中加载60,000个训练样本和10,000个测试样本。
49、 为了理解MNIST的图片是什么样子,让我们把它们形象化。将784像素值的矢量整形从特征矩阵改为之前的28*28的形状,然后通过matplotlib的imshow函数进行绘制:
50、 import matplotlib.pyplot as plt
51、 fig, ax=plt.subplots(
52、 nrows=2,
53、 ncols=5,
54、 sharex=True,
55、 sharey=True, )
56、 ax=ax.flatten()
57、 for i in range(10):
58、 img=X_train[y_train==i][0].reshape(28, 28)
59、 ax[i].imshow(img, cmap='Greys', interpolation='nearest')
60、 ax[0].set_xticks([])
61、 ax[0].set_yticks([])
62、 plt.tight_layout()
63、 plt.show()
64、 我们现在应该可以看到一个2*5 的图片, 里面分别是0-9 单个数字的图片.
65、 此外, 我们还可以绘制某一数字的多个样本图片, 来看一下这些手写样本到底有多不同:
66、 fig, ax=plt.subplots(
67、 nrows=5,
68、 ncols=5,
69、 sharex=True,
70、 sharey=True, )
71、 ax=ax.flatten()
72、 for i in range(25):
73、 img=X_train[y_train==7][i].reshape(28, 28)
74、 ax[i].imshow(img, cmap='Greys', interpolation='nearest')
75、 ax[0].set_xticks([])
76、 ax[0].set_yticks([])
77、 plt.tight_layout()
78、 plt.show()
79、 执行上面的代码后, 我们应该看到数字7 的25 个不同形态:
80、 另外, 我们也可以选择将MNIST 图片数据和标签保存为CSV 文件, 这样就可以在不支持特殊的字节格式的程序中打开数据集. 但是, 有一点要说明, CSV 的文件格式将会占用更多的磁盘空间, 如下所示:
81、 train_img.csv: 109.5 MB
82、 train_labels.csv: 120 KB
83、 test_img.csv: 18.3 MB
84、 test_labels: 20 KB
85、 如果我们打算保存这些CSV 文件, 在将MNIST 数据集加载入NumPy array 以后, 我们应该执行下列代码:
86、 np.savetxt('train_img.csv', X_train,
87、 fmt='%i', delimiter=',')
88、 np.savetxt('train_labels.csv', y_train,
89、 fmt='%i', delimiter=',')
90、 np.savetxt('test_img.csv', X_test,
91、 fmt='%i', delimiter=',')
92、 np.savetxt('test_labels.csv', y_test,
93、 fmt='%i', delimiter=',')
94、 一旦将数据集保存为CSV 文件, 我们也可以用NumPy 的genfromtxt函数重新将它们加载入程序中:
95、 X_train=np.genfromtxt('train_img.csv',
96、 dtype=int, delimiter=',')
97、 y_train=np.genfromtxt('train_labels.csv',
98、 dtype=int, delimiter=',')
99、 X_test=np.genfromtxt('test_img.csv',
100、 dtype=int, delimiter=',')
101、 y_test=np.genfromtxt('test_labels.csv',
102、 dtype=int, delimiter=',')
103、 不过, 从CSV 文件中加载MNIST 数据将会显著发给更长的时间, 因此如果可能的话, 还是建议你维持数据集原有的字节格式.
以上就是mnist这篇文章的一些介绍,希望对大家有所帮助。
来源:飞机E族,原载地址:http://tech.feijizu.com/tech/20230821/3960.html欢迎分享本文!