python处理MNIST数据集
1. MNIST数据集
1.1 MNIST数据集获取
MNIST数据集是入门机器学习/模式识别的最经典数据集之一。最早于1998年Yan Lecun在论文:
- Gradient-based learning applied to document recognition.
中提出。经典的LeNet-5 CNN网络也是在该论文中提出的。
数据集包含了0-9共10类手写数字图片,每张图片都做了尺寸归一化,都是28x28大小的灰度图。每张图片中像素值大小在0-255之间,其中0是黑色背景,255是白色前景。如下图所示:
MNIST共包含70000张手写数字图片,其中有60000张用作训练集,10000张用作测试集。原始数据集可在MNIST官网下载。
下载之后得到4个压缩文件:
train-images-idx3-ubyte.gz #60000张训练集图片
train-labels-idx1-ubyte.gz #60000张训练集图片对应的标签
t10k-images-idx3-ubyte.gz #10000张测试集图片
t10k-labels-idx1-ubyte.gz #10000张测试集图片对应的标签
将其解压,得到
train-images-idx3-ubyte
train-labels-idx1-ubyte
t10k-images-idx3-ubyte
t10k-labels-idx1-ubyte
1.2 MNIST二进制文件的存储格式
解压得到的四个文件都是二进制格式,我们如何获取其中的信息呢?这得首先了解MNIST二进制文件的存储格式(官网底部有介绍),以训练集图像文件train-images-idx3-ubyte
为例:
图像文件的
- 第1-4个byte(字节,1byte=8bit),即前32bit存的是文件的magic number,对应的十进制大小是2051;
- 第5-8个byte存的是number of images,即图像数量60000;
- 第9-12个byte存的是每张图片行数/高度,即28;
- 第13-16个byte存的是每张图片的列数/宽度,即28。
- 从第17个byte开始,每个byte存储一张图片中的一个像素点的值。
因为train-images-idx3-ubyte
文件总共包含了60000张图片数据,按照以上的存储方式,我们算一下该文件的大小:
- 一张图片包含28x28=784个像素点,需要784bytes的存储空间;
- 60000张图片则需要784x60000=47040000 bytes的存储空间;
- 此外,文件开始处使用了16个bytes用于存储magic number、图像数量、图像高度和图像宽度,因此,训练集图像文件的大小应该是47040000+16=47040016 bytes。
我们查看解压后的train-images-idx3-ubyte
文件的属性:
文件实际大小和我们计算的结果一致。
类似地,我们查看训练集标签文件train-labels-idx1-ubyte
的存储格式:
和图像文件类似:
- 第1-4个byte存的是文件的magic number,对应的十进制大小是2049;
- 第5-8个byte存的是number of items,即label数量60000;
- 从第9个byte开始,每个byte存一个图片的label信息,即数字0-9中的一个。
计算一下训练集标签文件train-labels-idx1-ubyte
的文件大小:
- 1x60000+8=60008 bytes。
与该文件实际的大小一致:
另外两个文件,即测试集图像文件、测试集标签文件的存储方式和训练图像文件、训练标签文件相似,只是图像数量由60000变为10000。
1.3 使用python访问MNIST数据集文件内容
知道了MNIST二进制文件的存储方式,下面介绍如何使用python访问文件内容。同样以训练集图像文件train-images-idx3-ubyte
为例:
首先,使用open()函数打开文件,并使用read()方法将所有的文件数据读入到一个字符串中:
yan@yanubuntu:~/codes/Deep-Learning-21-Examples/chapter_1/MNIST_data$ python
Python 2.7.12 (default, Nov 12 2018, 14:36:49)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> with open('train-images.idx3-ubyte', 'rb') as f:
... file = f.read()
...
>>>
file是str类型,其中的每个元素就存储的1个字节的内容。我们现在查看前4个字节,即magic number的内容,看下是否是前面说的2051:
>>> magic_number=file[:4]
>>> magic_number
'\x00\x00\x08\x03'
>>> magic_number.encode('hex')
'00000803'
>>> int(magic_number.encode('hex'),16)
2051
可以看出前4个byte的值确实是2051,但是不能直接输出magic number的内容,需要将其编码,然后才能转成十进制的int类型(有关字节编码的知识暂时没懂,先用着)。
同样的方式,查看图像数量、图像高度和图像宽度信息:
>>> num_images = int(file[4:8].encode('hex'),16)
>>> num_images
60000
>>> h_image = int(file[8:12].encode('hex'),16)
>>> h_image
28
>>> w_image = int(file[12:16].encode('hex'),16)
>>> w_image
28
现在获取第1张图片的像素信息,然后利用numpy和cv2模块转换其格式,并保存成.jpg
格式的图片:
>>> image1 = [int(item.encode('hex'), 16) for item in file[16:16+784]]
>>> len(image1)
784
>>> import numpy as np
>>> import cv2
>>> image1_np = np.array(image1, dtype=np.uint8).reshape(28,28,1)
>>> image1_np.shape
(28, 28, 1)
>>> cv2.imwrite('image1.jpg', image1_np)
True
>>>
保存下来的图片image1.jpg如下图所示:
该图片的标签是5,我们可以验证一下训练集标签文件train-labels-idx1-ubyte
文件的第一个标签是否和图像内容一一对应:
>>> with open('train-labels.idx1-ubyte', 'rb') as f:
... label_file = f.read()
...
>>> label1 = int(label_file[8].encode('hex'), 16)
>>> label1
5
>>>
训练标签文件的第一张图片标签是第9个byte(索引从0开始,所以第9个byte是label_file[8]),结果没问题。
1.4 将MNIST数据集保存成.jpg图片格式
因为使用上面得到的file和label_file文件是str类型,因此可以使用迭代的方式,将所有训练和测试集的二进制文件格式转成.jpg
图片格式。转换脚本mnist2jpg.py如下:
# coding=utf-8
'''将二进制格式的MNIST数据集转成.jpg图片格式并保存,图片标签包含在图片名中'''
import numpy as np
import cv2
import os
http://www.taodudu.cc/news/show-4783675.html
相关文章:
- MNIST数据集的导入与预处理
- DEM数据处理
- 数据大放送之HMA(8米分辨率的DEM数据)
- 常见DEM数据汇总
- Python数据结构之树形结构——数组存储
- python-8 数据结构
- [数据结构] python 单链表的创建
- 2023编程必会的100个代码大全,建议立刻收藏
- Hadoop 大数据学习笔记
- 【安全测试学习】基于bWAPP靶场,使用sqlmap实现脱库实战
- 如何基于泄露数据库的查询:脱库数据的整理和查询
- Nacos出现重大安全漏洞,开源项目险遭脱库
- 宇宙最强IDE vs2019升级
- 关于jsp网页弹出窗口
- 带壳录屏软件!
- bootdo监控后台上传文件定期失效
- 使用bootdo框架添加登录验证码
- 基于bootdo制作一个restful模块
- 登陆页面总结(bootdo)
- 多项目版本管理:monorepo 策略
- 大学计算机应用能力基础,大学计算机应用基础
- 大学计算机基础打字评分标准,大学计算机基础程标准.doc
- 现代计算机模型要求程序在执行前,大学计算机基础考试考点
- 西安交通大学计算机基础期末考试,《大学计算机基础试题与答案》-西安交通大学.doc...
- 计算机应用基础试题事业单位,事业单位考试计算机基础知识试题及答案
- 三星T5硬盘测试软件AS SSD及问题
- docker和vm不兼容遇到的坑
- win11与VM不兼容
- Vm14 中安装mac时出现如图情况是怎么回事?
- VM安装Ubuntu 16.04
python处理MNIST数据集相关推荐
- 项目:机器学习+FLD分类+python图像处理mnist数据集
机器学习+FLD分类+python图像处理mnist数据集 ** 以mnist数据集实现Fisher Linear Discriminant(FLD)的分类以及降维功能 任务一如下所示 以下任务是te ...
- 基于jupyter notebook的python编程-----MNIST数据集的的定义及相关处理学习
基于jupyter notebook的python编程-----MNIST数据集的相关处理 一.MNIST定义 1.什么是MNIST数据集 2.python如何导入MNIST数据集并操作 3.接下来, ...
- python 读取 MNIST 数据集,并解析为图片文件
python 读取 MNIST 数据集,并解析为图片文件 MNIST 是 Yann LeCun 收集创建的手写数字识别数据集,训练集有 60,000 张图片,测试集有 10,000 张图片.数据集链接 ...
- 使用Python解析MNIST数据集
五月两场 | NVIDIA DLI 深度学习入门课程 5月19日/5月26日一天密集式学习 快速带你入门阅读全文> 正文共948个字(不含代码),2张图,预计阅读时间15分钟. 前言 最近在学 ...
- python idx是什么_使用Python解析MNIST数据集(IDX文件格式)
前言 最近在学习Keras,要使用到LeCun大神的MNIST手写数字数据集,直接从官网上下载了4个压缩包: MNIST数据集 解压后发现里面每个压缩包里有一个idx-ubyte文件,没有图片文件在里 ...
- python中idx是什么意思_使用Python解析MNIST数据集(IDX文件格式)
前言 最近在学习Keras,要使用到LeCun大神的MNIST手写数字数据集,直接从官网上下载了4个压缩包: MNIST数据集 解压后发现里面每个压缩包里有一个idx-ubyte文件,没有图片文件在里 ...
- 使用Python解析MNIST数据集(IDX格式文件)
代码参考链接 mnist数据集idx格式文件: t10k-images-idx3-ubyte.gz:测试集数据 t10k-labels-idx1-ubyte.gz:测试集标签 train-images ...
- Python读取MNIST数据集
MNIST数据集下载地址:http://yann.lecun.com/exdb/mnist/ 读取MINST数据集第一张图像并显示 # coding=utf-8 import numpy as np ...
- Keras【Deep Learning With Python】MNIST数据集识别优化
文章目录 前言 1 线性回归预测 2 手写数字识别 3 模型优化 前言 本文分为三部分: a.线性回归 b.手写数字识别 c.手写数字识别模型优化. 1 线性回归预测 import keras Usi ...
最新文章
- 张正友平面标定法的一些注意事项
- Django开启HTTPS
- 【深度学习入门到精通系列】CIFAR-10数据集说明
- python语音翻译-python利用有道翻译实现“语言翻译器”的功能
- DAMS2019中国数据智能管理峰会将于7月在上海召开!
- WindowsServer2012 R2 64位中文标准版(IIS8.5)下手动搭建PHP环境详细图文教程(二)安装IIS8.5...
- CreatePipe匿名管道通信
- VS Code 0.5添加ES6支持和Git工具改进
- java 判断字符串是否汉子_java判断 字符串 是否有汉字
- PowerPoint媒体更加适合这样的场合
- Windows下最快的磁盘空间分析软件——WizTree
- unity资源释放(AssetBundle和Asset)
- Eclipse安装反编译工具Eclipse Class Decompiler:实现不下载源码,查看源文件
- python 版权保护,python爬虫篇4——爬取专利著作权信息
- matinee和matin区别_【近义词辨析】An和Année, Jour和Journée如何区别
- AIROBOT系统 之 私人存储 和 DLNA 智能电视云
- PHP EOF使用说明
- 一个官网很详细的富文本编辑器
- PORIS门禁控制器
- teamviewer出现无法连接伙伴问题