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中浮点数精度处理的技巧总结
Aug 10 Python
轻松实现TensorFlow微信跳一跳的AI
Jan 05 Python
Python元字符的用法实例解析
Jan 17 Python
Python实现屏幕截图的两种方式
Feb 05 Python
python绘制散点图并标记序号的方法
Dec 11 Python
详解python读取和输出到txt
Mar 29 Python
对PyQt5的输入对话框使用(QInputDialog)详解
Jun 25 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
Aug 05 Python
Python Django 简单分页的实现代码解析
Aug 21 Python
Python守护进程实现过程详解
Feb 10 Python
弄清Pytorch显存的分配机制
Dec 10 Python
pandas求平均数和中位数的方法实例
Aug 04 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
如何用php生成扭曲及旋转的验证码图片
2013/06/07 PHP
PHP中$_FILES的使用方法及注意事项说明
2014/02/14 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
Javascript实例教程(19) 使用HoTMetal(7)
2006/12/23 Javascript
在浏览器窗口上添加遮罩层的方法
2012/11/12 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
原生js事件的添加和删除的封装
2014/07/01 Javascript
JavaScript中的ArrayBuffer详细介绍
2014/12/08 Javascript
JS使用oumousemove和oumouseout动态改变图片显示的方法
2015/03/31 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
2015/12/02 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
jQuery版AJAX简易封装代码
2016/09/14 Javascript
JS闭包的几种常见形式实例详解
2017/09/16 Javascript
从零撸一个pc端vue的ui组件库( 计数器组件 )
2019/08/08 Javascript
在vue中实现禁止回退上一步,路由不存历史记录
2020/07/22 Javascript
原生js实现下拉框选择组件
2021/01/20 Javascript
python 获取文件列表(或是目录例表)
2009/03/25 Python
Python Requests模拟登录实现图书馆座位自动预约
2018/04/27 Python
python sorted函数原理解析及练习
2020/02/10 Python
Python RabbitMQ实现简单的进程间通信示例
2020/07/02 Python
python实现图片素描效果
2020/09/26 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传
2016/01/20 HTML / CSS
Maje德国官网:法国女性成衣品牌
2017/02/10 全球购物
关键字final的用法
2013/10/02 面试题
舞蹈教育学专业推荐信
2013/11/27 职场文书
应届生如何写自荐信
2014/01/05 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
团支部推优材料
2014/05/21 职场文书
酒店总经理岗位职责范本
2014/08/08 职场文书
门面房租房协议书
2014/12/01 职场文书
2014年小学图书室工作总结
2014/12/09 职场文书
全国爱牙日活动总结
2015/02/05 职场文书
pytorch通过训练结果的复现设置随机种子
2021/06/01 Python