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数据集相关推荐

  1. 项目:机器学习+FLD分类+python图像处理mnist数据集

    机器学习+FLD分类+python图像处理mnist数据集 ** 以mnist数据集实现Fisher Linear Discriminant(FLD)的分类以及降维功能 任务一如下所示 以下任务是te ...

  2. 基于jupyter notebook的python编程-----MNIST数据集的的定义及相关处理学习

    基于jupyter notebook的python编程-----MNIST数据集的相关处理 一.MNIST定义 1.什么是MNIST数据集 2.python如何导入MNIST数据集并操作 3.接下来, ...

  3. python 读取 MNIST 数据集,并解析为图片文件

    python 读取 MNIST 数据集,并解析为图片文件 MNIST 是 Yann LeCun 收集创建的手写数字识别数据集,训练集有 60,000 张图片,测试集有 10,000 张图片.数据集链接 ...

  4. 使用Python解析MNIST数据集

    五月两场 | NVIDIA DLI 深度学习入门课程 5月19日/5月26日一天密集式学习  快速带你入门阅读全文> 正文共948个字(不含代码),2张图,预计阅读时间15分钟. 前言 最近在学 ...

  5. python idx是什么_使用Python解析MNIST数据集(IDX文件格式)

    前言 最近在学习Keras,要使用到LeCun大神的MNIST手写数字数据集,直接从官网上下载了4个压缩包: MNIST数据集 解压后发现里面每个压缩包里有一个idx-ubyte文件,没有图片文件在里 ...

  6. python中idx是什么意思_使用Python解析MNIST数据集(IDX文件格式)

    前言 最近在学习Keras,要使用到LeCun大神的MNIST手写数字数据集,直接从官网上下载了4个压缩包: MNIST数据集 解压后发现里面每个压缩包里有一个idx-ubyte文件,没有图片文件在里 ...

  7. 使用Python解析MNIST数据集(IDX格式文件)

    代码参考链接 mnist数据集idx格式文件: t10k-images-idx3-ubyte.gz:测试集数据 t10k-labels-idx1-ubyte.gz:测试集标签 train-images ...

  8. Python读取MNIST数据集

    MNIST数据集下载地址:http://yann.lecun.com/exdb/mnist/ 读取MINST数据集第一张图像并显示 # coding=utf-8 import numpy as np ...

  9. Keras【Deep Learning With Python】MNIST数据集识别优化

    文章目录 前言 1 线性回归预测 2 手写数字识别 3 模型优化 前言 本文分为三部分: a.线性回归 b.手写数字识别 c.手写数字识别模型优化. 1 线性回归预测 import keras Usi ...

最新文章

  1. 张正友平面标定法的一些注意事项
  2. Django开启HTTPS
  3. 【深度学习入门到精通系列】CIFAR-10数据集说明
  4. python语音翻译-python利用有道翻译实现“语言翻译器”的功能
  5. DAMS2019中国数据智能管理峰会将于7月在上海召开!
  6. WindowsServer2012 R2 64位中文标准版(IIS8.5)下手动搭建PHP环境详细图文教程(二)安装IIS8.5...
  7. CreatePipe匿名管道通信
  8. VS Code 0.5添加ES6支持和Git工具改进
  9. java 判断字符串是否汉子_java判断 字符串 是否有汉字
  10. PowerPoint媒体更加适合这样的场合
  11. Windows下最快的磁盘空间分析软件——WizTree
  12. unity资源释放(AssetBundle和Asset)
  13. Eclipse安装反编译工具Eclipse Class Decompiler:实现不下载源码,查看源文件
  14. python 版权保护,python爬虫篇4——爬取专利著作权信息
  15. matinee和matin区别_【近义词辨析】An和Année, Jour和Journée如何区别
  16. AIROBOT系统 之 私人存储 和 DLNA 智能电视云
  17. PHP EOF使用说明
  18. 一个官网很详细的富文本编辑器
  19. PORIS门禁控制器
  20. teamviewer出现无法连接伙伴问题

热门文章

  1. 网页正文获取易语言代码
  2. java拦截器放行_Java Filter(拦截器)
  3. 仿生蛇形机器人03、Dynamixel MX-64AR舵机串联两个修改Demo(例程)进行调节
  4. ppt中如何输入四线三格字体
  5. 计算机word引用功能区,Word自定义:功能区和工具栏
  6. 完整的Django入门指南学习笔记7 网页自动翻译
  7. EJB 3 术语汇编
  8. P1981 [NOIP2013 普及组] 表达式求值
  9. 长沙市明德华兴中学2015班在湖南省智慧教育装备展示体验中心开展寒假社会实践活动
  10. CPLEX for MAC 安装教程