使用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标准库os.path包、glob包使用实例
Nov 25 Python
讲解Python中fileno()方法的使用
May 24 Python
深入浅析Python传值与传址
Jul 10 Python
Python中flatten( )函数及函数用法详解
Nov 02 Python
Python检测数据类型的方法总结
May 20 Python
python字典一键多值实例代码分享
Jun 14 Python
Django实现跨域的2种方法
Jul 31 Python
python爬虫刷访问量 2019 7月
Aug 01 Python
python标记语句块使用方法总结
Aug 05 Python
浅谈python多线程和多线程变量共享问题介绍
Apr 17 Python
python新手学习使用库
Jun 11 Python
python实现自动打卡的示例代码
Oct 10 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源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
PHP中strtotime函数使用方法详解
2011/11/27 PHP
基于PHP输出缓存(output_buffering)的深入理解
2013/06/13 PHP
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
php数组索引的Key加引号和不加引号的区别
2014/08/19 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
laravel框架分组控制器和分组路由实现方法示例
2020/01/25 PHP
我见过最全的个人js加解密功能页面
2007/12/12 Javascript
JavaScript的面向对象方法以及差别
2008/03/31 Javascript
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
2013/05/07 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
2014/11/28 Javascript
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
vue+axios新手实践实现登陆的示例代码
2018/06/06 Javascript
详解Angular5/Angular6项目如何添加热更新(HMR)功能
2018/10/10 Javascript
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
2019/01/18 jQuery
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
基于python编写的微博应用
2014/10/17 Python
python 网络编程详解及简单实例
2017/04/25 Python
Python编程之string相关操作实例详解
2017/07/22 Python
Python 基础教程之闭包的使用方法
2017/09/29 Python
Scrapy框架使用的基本知识
2018/10/21 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
2019/08/12 Python
python 实现return返回多个值
2019/11/19 Python
Python使用进程Process模块管理资源
2020/03/05 Python
Python3实现英文字母转换哥特式字体实例代码
2020/09/01 Python
css3实现背景动态渐变效果
2019/12/10 HTML / CSS
与C++相比,Java中的数组有什么不同
2014/03/25 面试题
优秀教师演讲稿
2014/05/06 职场文书
汽车转让协议书范本
2014/12/07 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
英文慰问信范文
2015/03/24 职场文书
催款律师函范文
2015/05/27 职场文书
教务处教学工作总结
2015/08/10 职场文书