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命令启动Web服务器实例详解
Feb 23 Python
python如何把嵌套列表转变成普通列表
Mar 20 Python
python opencv人脸检测提取及保存方法
Aug 03 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
Aug 07 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
Dec 24 Python
Python函数装饰器原理与用法详解
Aug 16 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
Apr 26 Python
详解pandas.DataFrame.plot() 画图函数
Jun 14 Python
python有几个版本
Jun 17 Python
OpenCV Python实现图像指定区域裁剪
Mar 12 Python
一文带你掌握Pyecharts地理数据可视化的方法
Feb 06 Python
Python实现列表拼接和去重的三种方式
Jul 02 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计划任务之关闭浏览器后仍然继续执行的函数
2010/07/22 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
php用header函数实现301跳转代码实例
2013/11/25 PHP
利用中国天气预报接口实现简单天气预报
2014/01/20 PHP
PHP Filter过滤器全面解析
2016/08/09 PHP
javascript 计算两个整数的百分比值
2009/12/26 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
js document.write()使用介绍
2014/02/21 Javascript
jquery实现人性化的有选择性禁用鼠标右键
2014/06/30 Javascript
javascript获取文档坐标和视口坐标
2015/05/26 Javascript
BootStrap组件之进度条的基本用法
2017/01/19 Javascript
windows下vue.js开发环境搭建教程
2017/03/20 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
浅谈React 服务器端渲染的使用
2018/05/08 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
2020/01/18 Javascript
详解Vue中的自定义指令
2020/12/07 Vue.js
解决python2.7 查询mysql时出现中文乱码
2016/10/09 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
Python列表list操作相关知识小结
2020/01/29 Python
浅谈keras中loss与val_loss的关系
2020/06/22 Python
Python爬虫获取豆瓣电影并写入excel
2020/07/31 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
外贸销售员求职的自我评价
2013/11/23 职场文书
小组合作学习反思
2014/02/18 职场文书
答谢会策划方案
2014/05/12 职场文书
技术岗位竞聘演讲稿
2014/05/16 职场文书
2014年协会工作总结
2014/11/22 职场文书
副总经理岗位职责
2015/02/02 职场文书
建筑技术负责人岗位职责
2015/04/13 职场文书
不同意离婚代理词
2015/05/23 职场文书
幼儿园教师读书笔记
2015/06/29 职场文书
7个你应该知道的JS原生错误类型
2021/04/29 Javascript
python b站视频下载的五种版本
2021/05/27 Python
git中cherry-pick命令的使用教程
2022/06/25 Servers