使用NumPy读取MNIST数据的实现代码示例


Posted in Python onNovember 20, 2019

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。如下图所示:

使用NumPy读取MNIST数据的实现代码示例

将下载好的四个gz文件拷贝到这个目录下,并将这四个gz文件解压。如下图所示:

使用NumPy读取MNIST数据的实现代码示例

使用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数据集。

使用NumPy读取MNIST数据的实现代码示例

下一步,我们要开始使用TensorFlow读取MNIST数据集。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python标准库defaultdict模块使用示例
Apr 28 Python
Python使用剪切板的方法
Jun 06 Python
用不到50行的Python代码构建最小的区块链
Nov 16 Python
Python实现读取Properties配置文件的方法
Mar 29 Python
Python标准库使用OrderedDict类的实例讲解
Feb 14 Python
python实现矩阵打印
Mar 02 Python
python 将字符串完成特定的向右移动方法
Jun 11 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
Sep 18 Python
Python使用微信接入图灵机器人过程解析
Nov 04 Python
基于Python快速处理PDF表格数据
Jun 03 Python
python - timeit 时间模块
Apr 06 Python
详解Python为什么不用设计模式
Jun 24 Python
Python脚本操作Excel实现批量替换功能
Nov 20 #Python
详解Python中的format格式化函数的使用方法
Nov 20 #Python
Python数据分析pandas模块用法实例详解
Nov 20 #Python
Python学习笔记之函数的参数和返回值的使用
Nov 20 #Python
Python求解正态分布置信区间教程
Nov 20 #Python
Python pandas RFM模型应用实例详解
Nov 20 #Python
使用Python实现正态分布、正态分布采样
Nov 20 #Python
You might like
一个php作的文本留言本的例子(二)
2006/10/09 PHP
PHP上传图片类显示缩略图功能
2016/06/30 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
JavaScript中使用replace结合正则实现replaceAll的效果
2010/06/04 Javascript
Jquery 例外被抛出且未被接住原因介绍
2013/09/04 Javascript
JS cookie中文乱码解决方法
2014/01/28 Javascript
jquery判断元素的子元素是否存在的示例代码
2014/02/04 Javascript
关于JavaScript中name的意义冲突示例介绍
2014/05/29 Javascript
JS自定义选项卡函数及用法实例分析
2015/09/02 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
JS实现title标题栏文字不间断滚动显示效果
2016/09/07 Javascript
前端框架Vue.js构建大型应用浅析
2016/09/12 Javascript
JS中promise化微信小程序api
2018/04/12 Javascript
setTimeout与setInterval的区别浅析
2019/03/23 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
2020/07/19 Javascript
python中stdout输出不缓存的设置方法
2014/05/29 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
2017/05/31 Python
Tornado 多进程实现分析详解
2018/01/12 Python
Python迭代器和生成器定义与用法示例
2018/02/10 Python
Python实现的多叉树寻找最短路径算法示例
2018/07/30 Python
python虚拟环境迁移方法
2019/01/03 Python
pyqt5 从本地选择图片 并显示在label上的实例
2019/06/13 Python
Python实现变声器功能(萝莉音御姐音)
2019/12/05 Python
Python实现爬取网页中动态加载的数据
2020/08/17 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
详解Python Celery和RabbitMQ实战教程
2021/01/20 Python
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
次世代生活态度:Hypebeast
2018/07/05 全球购物
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
电气自动化专业职业规划范文
2014/02/16 职场文书
物业经理自我鉴定
2014/03/03 职场文书
2014年学生党支部工作总结
2014/12/20 职场文书
《卖火柴的小女孩》教学反思
2016/02/19 职场文书
pytorch 梯度NAN异常值的解决方案
2021/06/05 Python
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
2021/09/25 Java/Android