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将unicode转为str的方法
Jun 21 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
Nov 01 Python
使用python装饰器计算函数运行时间的实例
Apr 21 Python
Django ManyToManyField 跨越中间表查询的方法
Dec 18 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
Dec 26 Python
Django REST framework视图的用法
Jan 16 Python
Python获取数据库数据并保存在excel表格中的方法
Jun 12 Python
详解Python3 pickle模块用法
Sep 16 Python
python批量处理多DNS多域名的nslookup解析实现
Jun 28 Python
使用python脚本自动生成K8S-YAML的方法示例
Jul 12 Python
python 如何做一个识别率百分百的OCR
May 29 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 获取全局变量的代码
2011/04/21 PHP
Thinkphp使用mongodb数据库实现多条件查询方法
2014/06/26 PHP
PHP里的单例类写法实例
2015/06/25 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
javascript 实用的文字链提示框效果
2010/06/30 Javascript
JavaScript获取FCK编辑器信息的具体方法
2013/07/12 Javascript
ie中js创建checkbox默认选中问题探讨
2013/10/21 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
jquery实现浮动的侧栏实例
2015/06/25 Javascript
学习javascript面向对象 掌握创建对象的9种方式
2016/01/04 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
2016/10/30 Javascript
mui上拉加载功能实例详解
2017/04/13 Javascript
JS实现前端页面的搜索功能
2018/06/12 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
解决layer.open后laydate失效的问题
2019/09/06 Javascript
JS document内容及样式操作完整示例
2020/01/14 Javascript
手把手教你实现 Promise的使用方法
2020/09/02 Javascript
Javascript柯里化实现原理及作用解析
2020/10/22 Javascript
[03:31]DOTA2英雄基础教程 大地之灵
2013/12/17 DOTA
python 中文字符串的处理实现代码
2009/10/25 Python
python中lambda与def用法对比实例分析
2015/04/30 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
Python实现串口通信(pyserial)过程解析
2019/09/25 Python
Python如何生成xml文件
2020/06/04 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
2020/12/31 Python
HTML5中原生的右键菜单创建方法
2016/06/28 HTML / CSS
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
社团活动总结
2014/04/28 职场文书
集中采购方案
2014/06/10 职场文书
中国梦演讲稿范文
2014/08/28 职场文书
领导班子党的群众路线对照检查材料
2014/09/25 职场文书
发展党员工作情况汇报
2014/10/28 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
CSS 还能这样玩?奇思妙想渐变的艺术
2021/04/27 HTML / CSS
解决 Redis 秒杀超卖场景的高并发
2022/04/12 Redis