使用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批量修改文件后缀的方法
Jan 26 Python
Python描述器descriptor详解
Feb 03 Python
Python类的定义、继承及类对象使用方法简明教程
May 08 Python
Python获取邮件地址的方法
Jul 10 Python
Python的Flask站点中集成xhEditor文本编辑器的教程
Jun 13 Python
Python 将RGB图像转换为Pytho灰度图像的实例
Nov 14 Python
50行Python代码实现人脸检测功能
Jan 23 Python
PyQt5打开文件对话框QFileDialog实例代码
Feb 07 Python
django小技巧之html模板中调用对象属性或对象的方法
Nov 30 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
Oct 11 Python
python实战之一步一步教你绘制小猪佩奇
Apr 22 Python
撤回我也能看到!教你用Python制作微信防撤回脚本
Jun 11 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
PHP4 与 MySQL 数据库操作函数详解
2006/12/06 PHP
PHP中HTTP方式下的Gzip压缩传输方法举偶
2007/02/15 PHP
PHP字符串中特殊符号的过滤方法介绍
2014/02/18 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
关于JavaScript的一些看法
2009/05/27 Javascript
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
js过滤数组重复元素的方法
2010/09/05 Javascript
真正的JQuery.ajax传递中文参数的解决方法
2011/05/28 Javascript
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
为Javascript中的String对象添加去除左右空格的方法(示例代码)
2013/11/30 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
jQuery简单实现日历的方法
2015/05/04 Javascript
Jquery检验手机号是否符合规则并根据手机号检测结果将提交按钮设为不同状态
2015/11/26 Javascript
JavaScript之生成器_动力节点Java学院整理
2017/06/30 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
jQuery+CSS实现的标签页效果示例【测试可用】
2018/08/14 jQuery
解决angular双向绑定无效果,ng-model不能正常显示的问题
2018/10/02 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
2019/08/27 Javascript
JS数组splice操作实例分析
2019/10/12 Javascript
js实现贪吃蛇游戏(简易版)
2020/09/29 Javascript
微信小程序picker组件两列关联使用方式
2020/10/27 Javascript
如何利用nodejs自动定时发送邮件提醒(超实用)
2020/12/01 NodeJs
Python编程实现微信企业号文本消息推送功能示例
2017/08/21 Python
python中删除某个元素的方法解析
2019/11/05 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
2019/11/08 Python
django实现模板中的字符串文字和自动转义
2020/03/31 Python
python文件及目录操作代码汇总
2020/07/08 Python
python Tornado框架的使用示例
2020/10/19 Python
python 模拟登陆163邮箱
2020/12/15 Python
澳大利亚购买最佳炊具品牌网站:Cookware Brands
2019/02/16 全球购物
你所在的项目是如何确定版本号的
2015/12/28 面试题
医院辞职信范文
2014/01/17 职场文书
保护环境建议书100字
2014/05/13 职场文书
大学生心理活动总结
2014/07/04 职场文书
2014中学教师节广播稿
2014/09/10 职场文书
js作用域及作用域链工作引擎
2022/07/07 Javascript