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中字典创建、遍历、添加等实用操作技巧合集
Jun 02 Python
Python将DataFrame的某一列作为index的方法
Apr 08 Python
django框架自定义用户表操作示例
Aug 07 Python
详解django自定义中间件处理
Nov 21 Python
解决pyinstaller打包pyqt5的问题
Jan 08 Python
Python 实现域名解析为ip的方法
Feb 14 Python
python实现简单日期工具类
Apr 24 Python
Python生成rsa密钥对操作示例
Apr 26 Python
Python 使用list和tuple+条件判断详解
Jul 30 Python
python的time模块和datetime模块实例解析
Nov 29 Python
Python 爬取必应壁纸的实例讲解
Feb 24 Python
python绘制高斯曲线
Feb 19 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/08/08 PHP
php中count获取多维数组长度的方法
2014/11/03 PHP
PHP 反射(Reflection)使用实例
2015/05/12 PHP
php使用APC实现实时上传进度条功能
2015/10/26 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
PHP保留两位小数的几种方法
2019/07/24 PHP
JavaScript初学者需要了解10个小技巧
2010/08/25 Javascript
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
JavaScript中的onerror事件概述及使用
2013/04/01 Javascript
JS获取计算机mac地址以及IP的实现方法
2014/01/08 Javascript
使用js画图之画切线
2015/01/12 Javascript
Jquery中offset()和position()的区别分析
2015/02/05 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
2015/11/05 Javascript
Bootstrap jquery.twbsPagination.js动态页码分页实例代码
2017/02/20 Javascript
如何使用Bootstrap 按钮实例详解
2017/03/29 Javascript
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
Vue-drag-resize 拖拽缩放插件的使用(简单示例)
2019/12/04 Javascript
Python3多进程 multiprocessing 模块实例详解
2018/06/11 Python
Python读取excel中的图片完美解决方法
2018/07/27 Python
python 并发编程 多路复用IO模型详解
2019/08/20 Python
15行Python代码实现免费发送手机短信推送消息功能
2020/02/27 Python
pycharm下pyqt4安装及环境配置的教程
2020/04/24 Python
Python连接Impala实现步骤解析
2020/08/04 Python
AJAX都有哪些有点和缺点
2012/11/03 面试题
物流管理毕业生自荐信
2013/10/24 职场文书
装修设计师求职信
2014/02/26 职场文书
劲霸男装广告词改编版
2014/03/21 职场文书
计算机毕业生求职信
2014/06/10 职场文书
高中课前三分钟演讲稿
2014/08/18 职场文书
浪漫婚礼主题活动策划方案
2014/09/15 职场文书
单位工作证明书格式
2014/10/04 职场文书
2014年教师个人工作总结
2014/11/10 职场文书
2015年度个人业务工作总结
2015/04/27 职场文书
python 调用js的四种方式
2021/04/11 Python
海弦WR-800F
2022/04/05 无线电