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操作xml文件示例
Apr 07 Python
Python中多线程及程序锁浅析
Jan 21 Python
Python、Javascript中的闭包比较
Feb 04 Python
简单介绍Python中的decode()方法的使用
May 18 Python
浅谈Python类的__getitem__和__setitem__特殊方法
Dec 25 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
Dec 21 Python
python 猴子补丁(monkey patch)
Jun 26 Python
Django自定义模板过滤器和标签的实现方法
Aug 21 Python
Python 删除List元素的三种方法remove、pop、del
Nov 16 Python
python本地文件服务器实例教程
May 02 Python
使用pandas模块实现数据的标准化操作
May 14 Python
Django框架之路由用法
Jun 10 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
杏林同学录(九)
2006/10/09 PHP
PHP 中魔术常量的实例详解
2017/10/26 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
取得父标签
2006/11/14 Javascript
为指定元素增加样式的js代码
2009/12/09 Javascript
初学js插入节点appendChild insertBefore使用方法
2011/07/04 Javascript
ASP.NET jQuery 实例12 通过使用jQuery validation插件简单实现用户注册页面验证功能
2012/02/03 Javascript
input输入框的自动匹配(原生代码)
2013/03/19 Javascript
JS删除数组元素的函数介绍
2013/03/27 Javascript
Nodejs实现的一个静态服务器实例
2014/12/06 NodeJs
JS实现将数字金额转换为大写人民币汉字的方法
2016/08/02 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
JavaScript、C# URL编码、解码总结
2017/01/21 Javascript
AngularJS实现进度条功能示例
2017/07/05 Javascript
vue2.0使用swiper组件实现轮播效果
2017/11/27 Javascript
Vue实现active点击切换方法
2018/03/16 Javascript
Vue.js实现的表格增加删除demo示例
2018/05/22 Javascript
jQuery的Ajax接收java返回数据方法
2018/08/11 jQuery
vue + typescript + video.js实现 流媒体播放 视频监控功能
2019/07/07 Javascript
python获取外网ip地址的方法总结
2015/07/02 Python
Windows下安装Django框架的方法简明教程
2018/03/28 Python
详解Django中六个常用的自定义装饰器
2018/07/04 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
Python3 requests模块如何模仿浏览器及代理
2020/06/15 Python
Python3爬虫RedisDump的安装步骤
2021/02/20 Python
html5 外链式实现加减乘除的代码
2019/09/04 HTML / CSS
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
卡拉威高尔夫官方网站:Callaway Golf
2020/09/16 全球购物
C语言变量的命名规则都有哪些
2013/12/27 面试题
高一地理教学反思
2014/01/18 职场文书
读书活动实施方案
2014/03/10 职场文书
职务聘任书范文
2014/03/29 职场文书
面试自我评价范文
2014/09/17 职场文书
幼儿园小班个人工作总结
2015/02/12 职场文书
电影红河谷观后感
2015/06/11 职场文书
赡养老人协议书范本
2015/08/06 职场文书