mnist数据集下载(mnist)

-作者:飞机E族 -
2023-08-21

你们好,最近小时发现有诸多的小伙伴们对于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这篇文章的一些介绍,希望对大家有所帮助。

来源:,原载地址:http://tech.feijizu.com/tech/20230821/3960.html欢迎分享本文!

Copyright © 2014-2023 www.feijizu.com 飞机E族 版权所有 Power by www.feijizu.com