使用NumPy读取MNIST数据的实现代码示例
作者:justidle 发布时间:2021-08-05 19:17:52
NumPy
什么是NumPy
NumPy是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。主页为https://numpy.org/。
安装NumPy
使用pip工具来安装。
python -m pip install numpy
使用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 维的 NumPy array(images),这里的 n 是样本行数,m 是特征列数。训练数据集包含 60,000 个样本,测试数据集包含 10,000 样本。
在 MNIST 数据集中的每张图片由 28 * 28 个像素点构成,每个像素点用一个灰度值表示。在这里,我们将 28 * 28 的像素展开为一个一维的行向量,这些行向量就是图片数组里的行(每行 784 个值, 或者说每行就是代表了一张图片)。
load_mnist 函数返回的第二个数组(labels) 包含了相应的目标变量,也就是手写数字的类标签(整数 0-9)。
import os
import struct
import numpy as np
def load_mnist(path, kind='train'):
"""Load MNIST data from `path`"""
labels_path = os.path.join(path,'%s-labels-idx1-ubyte'% kind)
images_path = os.path.join(path,'%s-images-idx3-ubyte'% kind)
with open(labels_path, 'rb') as lbpath:
magic, n = struct.unpack('>II',lbpath.read(8))
labels = np.fromfile(lbpath,dtype=np.uint8)
#读入magic是一个文件协议的描述,也是调用fromfile 方法将字节读入NumPy的array之前在文件缓冲中的item数(n).
with open(images_path, 'rb') as imgpath:
magic, num, rows, cols = struct.unpack('>IIII',imgpath.read(16))
images = np.fromfile(imgpath,dtype=np.uint8).reshape(len(labels), 784)
return images, labels
print(load_mnist("minst_data"))
运行代码,将得到如下图结果,说明我们已经正确的从本地读取MNIST数据集。
下一步,我们要开始使用TensorFlow读取MNIST数据集。
来源:https://blog.csdn.net/justidle/article/details/103146658


猜你喜欢
- 内容摘要:在像网站首页这样的资源比较集中的页面中,那些栏目最经常被用户点击?居左居右对广告的点击率的影响是什么?“一切用数字说话”:以上问题
- 使用 IE8 时发现其原生的 JSON 解析器存在 Bug,让我们先用 IE8 打开 DEMO 页面体验下。http://lab.grace
- 1. 前言如果只需要研究Linux的tcp协议栈行为,只需要使用packetdrill就能够满足我的所有需求。packetdrill才是让我
- 单表操作增加数据auther_obj = {"auther_name":"崔皓然","au
- 普通查询按照所需字段排序db_set.find().sort("field_name ",pymongo.ASCENDI
- python中向上取整可以用ceil函数,ceil函数是在math模块下的一个函数。向上取整需要用到 math 模块中的 ceil() 方法
- 目录注册组件添加组件源代码可拖放文本框允许用户通过拖动备选项至文本框来确定输入,其实也可以说是 combobox 的一种变形。 与 comb
- 在图像处理中,直方图是非常重要,也是非常有用的一个处理要素。在skimage库中对直方图的处理,是放在exposure这个模块中。1、计算直
- 本文实例讲述了Python实现读取Properties配置文件的方法。分享给大家供大家参考,具体如下:JAVA本身提供了对于Properti
- 对于np.argmax()让我迷惑了很久,尤其是其中的axis=1的比较结果。一、np.argmax()的理解1、最简单的例子假定现在有一个
- 1. 代码讲解1.1 导库import os.pathfrom os import listdirimport numpy as npimp
- 描述sin()返回的x弧度的正弦值。语法以下是sin()方法的语法:importmath math.sin(x)注意:sin()是不能直接访
- 本文实例讲述了python实现颜色rgb和hex相互转换的函数。分享给大家供大家参考。具体分析如下:下面的python代码提供了两个函数分别
- 概括、从python1.6开始就可以处理unicode字符了。 一、几种常见的编码格式。 1.1、ascii,用1个字节表示。 1.2、UT
- 有 N 个花园,按从 1 到 N 标记。在每个花园中,你打算种下四种花之一。paths[i] = [x, y] 描述了花园 x 到花园 y
- 在Python多线程中如何创建一个线程对象如果你要创建一个线程对象,很简单,只要你的类继承threading.Thread,然后在__ini
- 看了一个月的文档和资料以后,终于让我参与到项目中来了,哈哈,痛快!虽然只是让我解决一个小问题,不过有活干就是好。在写代码的过程中遇到了一个小
- 在实现算法的时候,通常会从两方面考虑算法的复杂度,即时间复杂度和空间复杂度。顾名思义,时间复杂度用于度量算法的计算工作量,空间复杂度用于度量
- 经常在各处牛人的代码中看到许多简写的条件表达语句,看了一些介绍这方面的文章,觉得3 ways 2 say if这篇文章(http://www
- 如何显示随机信息?使用了asp的randomize来创造随机数,select case来显示自定义信息。具体代码如下:<html>