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 相关文章推荐
仅用50行代码实现一个Python编写的计算器的教程
Apr 17 Python
从Python程序中访问Java类的简单示例
Apr 20 Python
Python利用Beautiful Soup模块修改内容方法示例
Mar 27 Python
python运行其他程序的实现方法
Jul 14 Python
python实现发送邮件功能
Jul 22 Python
Python面向对象类的继承实例详解
Jun 27 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
May 16 Python
基于Django框架的权限组件rbac实例讲解
Aug 31 Python
Pycharm小白级简单使用教程
Jan 08 Python
jupyter notebook 添加kernel permission denied的操作
Apr 21 Python
Django返回HTML文件的实现方法
Sep 17 Python
pycharm永久激活超详细教程
Oct 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查找字符串出现次数的方法
2014/12/01 PHP
使用PHP实现阻止用户上传成人照片或者裸照
2014/12/25 PHP
PHP安全上传图片的方法
2015/03/21 PHP
php实现统计网站在线人数的方法
2015/05/12 PHP
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
2020/04/26 PHP
一个简单的jQuery插件制作 学习过程及实例
2010/04/25 Javascript
JS高级拖动技术 setCapture,releaseCapture
2011/07/31 Javascript
javascript几个易错点记录
2014/11/26 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(2)
2017/02/20 Javascript
微信小程序 图片加载(本地,网路)实例详解
2017/03/10 Javascript
vue系列之动态路由详解【原创】
2017/09/10 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
vue v-for 使用问题整理小结
2019/08/04 Javascript
nodejs文件夹深层复制功能
2019/09/03 NodeJs
基python实现多线程网页爬虫
2015/09/06 Python
Python实现多级目录压缩与解压文件的方法
2018/09/01 Python
Python实现对特定列表进行从小到大排序操作示例
2019/02/11 Python
Python逐行读取文件中内容的简单方法
2019/02/26 Python
Python二元赋值实用技巧解析
2019/10/25 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
2020/01/08 Python
Python实现动态循环输出文字功能
2020/05/07 Python
Python根据指定文件生成XML的方法
2020/06/29 Python
高考考python编程是真的吗
2020/07/20 Python
Html5剪切板功能的实现代码
2018/06/29 HTML / CSS
美国娱乐和流行文化商品店:FYE
2017/09/14 全球购物
科颜氏英国官网:Kiehl’s英国
2019/11/20 全球购物
如何手工释放资源
2013/12/15 面试题
大学社团计划书
2014/05/01 职场文书
2014年保管员工作总结
2014/11/18 职场文书
2014年党支部书记工作总结
2014/12/04 职场文书
学生个人总结范文
2015/02/15 职场文书
2016年情人节广告语
2016/01/28 职场文书
Python基础之元编程知识总结
2021/05/23 Python