python读取mnist数据集方法案例详解


Posted in Python onSeptember 04, 2021

mnist手写数字数据集在机器学习中非常常见,这里记录一下用python从本地读取mnist数据集的方法。

数据集格式介绍

这部分内容网络上很常见,这里还是简明介绍一下。网络上下载的mnist数据集包含4个文件:

python读取mnist数据集方法案例详解

前两个分别是测试集的image和label,包含10000个样本。后两个是训练集的,包含60000个样本。.gz表示这个一个压缩包,如果进行解压的话,会得到.ubyte格式的二进制文件。

python读取mnist数据集方法案例详解

上图是训练集的label和image数据的存储格式。两个文件最开始都有magic number和number of images/items两个数据,有用的是第二个,表示文件中存储的样本个数。另外要注意的是数据的位数,有32位整型和8位整型两种。

读取方法

.gz格式的文件读取

需要import gzip
读取训练集的代码如下:

def load_mnist_train(path, kind='train'): 
'‘'
path:数据集的路径
kind:值为train,代表读取训练集
‘'‘   
    labels_path = os.path.join(path,'%s-labels-idx1-ubyte.gz'% kind)
    images_path = os.path.join(path,'%s-images-idx3-ubyte.gz'% kind)
    #使用gzip打开文件
    with gzip.open(labels_path, 'rb') as lbpath:
	    #使用struct.unpack方法读取前两个数据,>代表高位在前,I代表32位整型。lbpath.read(8)表示一次从文件中读取8个字节
	    #这样读到的前两个数据分别是magic number和样本个数
        magic, n = struct.unpack('>II',lbpath.read(8))
        #使用np.fromstring读取剩下的数据,lbpath.read()表示读取所有的数据
        labels = np.fromstring(lbpath.read(),dtype=np.uint8)
    with gzip.open(images_path, 'rb') as imgpath:
        magic, num, rows, cols = struct.unpack('>IIII',imgpath.read(16))
        images = np.fromstring(imgpath.read(),dtype=np.uint8).reshape(len(labels), 784)
    return images, labels

读取测试集的代码类似。

非压缩文件的读取

如果在本地对四个文件解压缩之后,得到的就是.ubyte格式的文件,这时读取的代码有所变化。

def load_mnist_train(path, kind='train'): 
'‘'
path:数据集的路径
kind:值为train,代表读取训练集
‘'‘   
    labels_path = os.path.join(path,'%s-labels-idx1-ubyte'% kind)
    images_path = os.path.join(path,'%s-images-idx3-ubyte'% kind)
    #不再用gzip打开文件
    with open(labels_path, 'rb') as lbpath:
	    #使用struct.unpack方法读取前两个数据,>代表高位在前,I代表32位整型。lbpath.read(8)表示一次从文件中读取8个字节
	    #这样读到的前两个数据分别是magic number和样本个数
        magic, n = struct.unpack('>II',lbpath.read(8))
        #使用np.fromfile读取剩下的数据
        labels = np.fromfile(lbpath,dtype=np.uint8)
    with gzip.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

读取之后可以查看images和labels的长度,确认读取是否正确。

到此这篇关于python读取mnist数据集方法案例详解的文章就介绍到这了,更多相关python读取mnist数据集方法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
简单理解Python中的装饰器
Jul 31 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
Oct 28 Python
详解python中的线程与线程池
May 10 Python
jupyter notebook 中输出pyecharts图实例
Apr 23 Python
详解python 降级到3.6终极解决方案
Feb 06 Python
设置jupyter中DataFrame的显示限制方式
Apr 12 Python
利用pandas向一个csv文件追加写入数据的实现示例
Apr 23 Python
Python实现CAN报文转换工具教程
May 05 Python
Python如何输出整数
Jun 07 Python
Python 调用C++封装的进一步探索交流
Mar 04 Python
python通配符之glob模块的使用详解
Apr 24 Python
PyQt5实现多张图片显示并滚动
Jun 11 Python
Pyqt5将多个类组合在一个界面显示的完整示例
Sep 04 #Python
一小时学会TensorFlow2之基本操作2实例代码
Python torch.flatten()函数案例详解
Aug 30 #Python
Python之基础函数案例详解
Aug 30 #Python
python中使用 unittest.TestCase单元测试的用例详解
Aug 30 #Python
python使用matplotlib绘制图片时x轴的刻度处理
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
Aug 30 #Python
You might like
全国FM电台频率大全 - 15 山东省
2020/03/11 无线电
PHP4在WinXP下IIS和Apache2服务器上的安装实例
2006/10/09 PHP
phpfans留言版用到的数据操作类和分页类
2007/01/04 PHP
基于命令行执行带参数的php脚本并取得参数的方法
2016/01/25 PHP
jQuery 对象中的类数组操作
2009/04/27 Javascript
JS 对象介绍
2010/01/20 Javascript
javascript css styleFloat和cssFloat
2010/03/15 Javascript
javascript nextSibling 与 getNextElement(node) 使用介绍
2011/10/13 Javascript
解析使用js判断只能输入数字、字母等验证的方法(总结)
2013/05/14 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
jQuery仿gmail实现fixed布局的方法
2015/05/27 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
JS实现图文并茂的tab选项卡效果示例【附demo源码下载】
2016/09/21 Javascript
AngularJS入门教程二:在路由中传递参数的方法分析
2017/05/27 Javascript
angularjs+bootstrap实现自定义分页的实例代码
2017/06/19 Javascript
vue中接口域名配置为全局变量的实现方法
2018/09/20 Javascript
详解关于element el-button使用$attrs的一个注意要点
2018/11/09 Javascript
Vue 3自定义指令开发的相关总结
2021/01/29 Vue.js
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
python的schedule定时任务模块二次封装方法
2019/02/19 Python
python 计算数据偏差和峰度的方法
2019/06/29 Python
python实现DEM数据的阴影生成的方法
2019/07/23 Python
Python 使用多属性来进行排序
2019/09/01 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
Django自带用户认证系统使用方法解析
2020/11/12 Python
amazeui 验证按钮扩展的实现
2020/08/21 HTML / CSS
犹他州最古老的体育用品公司:Al’s
2020/12/18 全球购物
自荐信要包含哪些内容
2013/11/06 职场文书
求职信的七个关键技巧
2014/02/05 职场文书
个人工作主要事迹
2014/05/08 职场文书
幼师中班个人总结
2015/02/12 职场文书
离婚被告代理词
2015/05/23 职场文书
2016应届大学生自荐信模板
2016/01/28 职场文书
Go语言中的UTF-8实现
2021/04/26 Golang
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python