使用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文件和目录操作函数小结
Jul 11 Python
初学python的操作难点总结(新手必看篇)
Aug 03 Python
python 执行shell命令并将结果保存的实例
May 11 Python
Python基于dom操作xml数据的方法示例
May 12 Python
将tensorflow的ckpt模型存储为npy的实例
Jul 09 Python
Python面向对象之继承和组合用法实例分析
Aug 27 Python
Python将一个Excel拆分为多个Excel
Nov 07 Python
Pytorch中实现只导入部分模型参数的方式
Jan 02 Python
TensorFlow自定义损失函数来预测商品销售量
Feb 05 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
Apr 22 Python
python实现文法左递归的消除方法
May 22 Python
再谈python_tkinter弹出对话框创建
Mar 20 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
在IIS下安装PHP扩展的方法(超简单)
2017/04/10 PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
2018/01/29 PHP
用JTrackBar实现的模拟苹果风格的滚动条
2007/08/06 Javascript
jQuery多个input求和的实现方法
2015/02/12 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
Jquery简单实现GridView行高亮的方法
2015/06/15 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
2016/06/02 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
2016/06/24 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
js传递数组参数到后台controller的方法
2018/03/29 Javascript
基于vue cli 通过命令行传参实现多环境配置
2018/07/12 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
Nuxt配置Element-UI按需引入的操作方法
2020/07/06 Javascript
[49:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 KG VS TNC
2018/03/31 DOTA
[13:25]VP vs VICI (BO3)
2018/06/07 DOTA
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
python下os模块强大的重命名方法renames详解
2017/03/07 Python
在VS Code上搭建Python开发环境的方法
2018/04/06 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
2019/04/18 Python
Python基于机器学习方法实现的电影推荐系统实例详解
2019/06/25 Python
python返回数组的索引实例
2019/11/28 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
Python定时任务框架APScheduler原理及常用代码
2020/10/05 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
Booking.com荷兰:全球酒店网上预订
2017/08/22 全球购物
武汉某公司的C#笔试题面试题
2015/12/25 面试题
个人承诺书
2014/03/26 职场文书
纪律教育月活动总结
2014/08/26 职场文书
公路局群众路线教育实践活动第一阶段工作汇报
2014/10/25 职场文书
员工辞职信范文
2015/03/02 职场文书
单位政审意见范文
2015/06/04 职场文书
爱国主义教育主题班会
2015/08/13 职场文书
祝福语集锦:给百岁老人祝寿贺词
2019/11/19 职场文书