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函数帮助查询小工具
Mar 13 Python
python实现sublime3的less编译插件示例
Apr 27 Python
Python求两个list的差集、交集与并集的方法
Nov 01 Python
Python包,__init__.py功能与用法分析
Jan 07 Python
Python开发之基于模板匹配的信用卡数字识别功能
Jan 13 Python
python代码如何实现余弦相似性计算
Feb 09 Python
python多项式拟合之np.polyfit 和 np.polyld详解
Feb 18 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
Feb 28 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
Mar 06 Python
Pycharm配置PyQt5环境的教程
Apr 02 Python
python中rc1什么意思
Jun 19 Python
PYTHON InceptionV3模型的复现详解
May 06 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
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
Jquery之Bind方法参数传递与接收的三种方法
2014/06/24 Javascript
json属性名为什么要双引号(个人猜测)
2014/07/31 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
jQuery拖动元素并对元素进行重新排序
2015/12/30 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
JavaScript 控制字体大小设置的方法
2016/11/23 Javascript
jQuery实用密码强度检测
2017/03/02 Javascript
微信小程序 开发之全局配置
2017/05/05 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
MySQL中表的复制以及大型数据表的备份教程
2015/11/25 Python
解决Python requests 报错方法集锦
2017/03/19 Python
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
Python 判断 有向图 是否有环的实例讲解
2018/02/01 Python
分析python动态规划的递归、非递归实现
2018/03/04 Python
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
用Python实现读写锁的示例代码
2018/11/05 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
2019/07/11 Python
如何利用Python模拟GitHub登录详解
2019/07/15 Python
Python基于pandas爬取网页表格数据
2020/05/11 Python
利用PyTorch实现VGG16教程
2020/06/24 Python
使用HTML5 Canvas为图片填充颜色和纹理的教程
2016/03/21 HTML / CSS
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
开发中都用到了那些设计模式?用在什么场合?
2014/08/21 面试题
SQL Server数据库笔试题和答案
2016/02/04 面试题
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
五年后的职业生涯规划
2014/03/04 职场文书
12岁生日演讲稿
2014/05/14 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
2015年元旦主持词结束语
2014/12/14 职场文书
陪护人员误工证明
2015/06/24 职场文书
Python下载商品数据并连接数据库且保存数据
2022/03/31 Python
Android Rxjava3 使用场景详解
2022/04/07 Java/Android
Docker容器harbor私有仓库部署和管理
2022/08/05 Servers