使用NumPy读取MNIST数据的实现代码示例
NumPy
什么是NumPy
NumPy是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。主页为https://numpy.org/。
安装NumPy
使用pip工具来安装。
python-mpipinstallnumpy
使用NumPy读取mnist数据
如果直接从网络上读取mnist数据,恭喜你,目前国内基本需要一个小时以上。所以建议预先下载mnist数据包。
工作环境
当前我的工作环境如下:Win10+Anaconda。使用Spyder4做为IDE。Anaconda的安装可以参考我的blog。
将数据放置到指定目录
下图是我当前的工作目录环境,因此在C:\Users\sus20\.spyder-py3-dev目录下,建立子目录minist。如下图所示:
将下载好的四个gz文件拷贝到这个目录下,并将这四个gz文件解压。如下图所示:
使用NumPy读取MNIST
load_mnist函数返回两个数组,第一个是一个n*m维的NumPyarray(images),这里的n是样本行数,m是特征列数。训练数据集包含60,000个样本,测试数据集包含10,000样本。
在MNIST数据集中的每张图片由28*28个像素点构成,每个像素点用一个灰度值表示。在这里,我们将28*28的像素展开为一个一维的行向量,这些行向量就是图片数组里的行(每行784个值,或者说每行就是代表了一张图片)。
load_mnist函数返回的第二个数组(labels)包含了相应的目标变量,也就是手写数字的类标签(整数0-9)。
importos importstruct importnumpyasnp defload_mnist(path,kind='train'): """LoadMNISTdatafrom`path`""" labels_path=os.path.join(path,'%s-labels-idx1-ubyte'%kind) images_path=os.path.join(path,'%s-images-idx3-ubyte'%kind) withopen(labels_path,'rb')aslbpath: magic,n=struct.unpack('>II',lbpath.read(8)) labels=np.fromfile(lbpath,dtype=np.uint8) #读入magic是一个文件协议的描述,也是调用fromfile方法将字节读入NumPy的array之前在文件缓冲中的item数(n). withopen(images_path,'rb')asimgpath: magic,num,rows,cols=struct.unpack('>IIII',imgpath.read(16)) images=np.fromfile(imgpath,dtype=np.uint8).reshape(len(labels),784) returnimages,labels print(load_mnist("minst_data"))
运行代码,将得到如下图结果,说明我们已经正确的从本地读取MNIST数据集。
下一步,我们要开始使用TensorFlow读取MNIST数据集。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。