使用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 可爱的大小写
Sep 06 Python
python实现排序算法
Feb 14 Python
Python进行数据科学工作的简单入门教程
Apr 01 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
Feb 26 Python
详解python函数的闭包问题(内部函数与外部函数详述)
May 17 Python
python获取点击的坐标画图形的方法
Jul 09 Python
python设计tcp数据包协议类的例子
Jul 23 Python
如何基于python生成list的所有的子集
Nov 11 Python
Python Numpy 自然数填充数组的实现
Nov 28 Python
Python实现曲线拟合的最小二乘法
Feb 19 Python
python爬虫破解字体加密案例详解
Mar 02 Python
Python可视化神器pyecharts之绘制箱形图
Jul 07 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
了解Joomla 这款来自国外的php网站管理系统
2010/03/11 PHP
解析关于wamp启动是80端口被占用的问题
2013/06/21 PHP
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
qTip2 精致的基于jQuery提示信息插件
2012/02/17 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
转换字符串为json对象的方法详解
2013/11/29 Javascript
JavaScript避免内存泄露及内存管理技巧
2014/09/05 Javascript
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
jQuery跨域问题解决方案
2015/08/03 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
Bootstrap Img 图片样式(推荐)
2016/12/13 Javascript
JS简单获取当前年月日星期的方法示例
2017/02/07 Javascript
bootstrapValidator 重新启用提交按钮的方法
2017/02/20 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
[02:36]DOTA2英雄基础教程 一击致命幻影刺客
2013/12/06 DOTA
[01:03:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第一场 1月29日
2021/03/11 DOTA
Python多线程编程(四):使用Lock互斥锁
2015/04/05 Python
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
nohup后台启动Python脚本,log不刷新的解决方法
2019/01/14 Python
python 读取修改pcap包的例子
2019/07/23 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
2019/10/18 Python
Python @property装饰器原理解析
2020/01/22 Python
PyCharm 2020 激活到 2100 年的教程
2020/03/25 Python
Python中的全局变量如何理解
2020/06/04 Python
使用Keras实现Tensor的相乘和相加代码
2020/06/18 Python
python批量生成条形码的示例
2020/10/10 Python
Microsoft新加坡官方网站:购买微软最新软件和技术产品
2016/10/28 全球购物
Yahoo-PHP面试题3
2012/01/14 面试题
保险专业大专生求职信
2013/10/26 职场文书
翻译专业应届生求职信
2013/11/23 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
2016高考寄语集锦
2015/12/04 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书
SQL SERVER存储过程用法详解
2022/02/24 SQL Server