(超详细)读取mnist数据集并保存成图片
mnist数据集介绍、读取、保存成图片
- 1、mnist数据集介绍:
- MNIST数据集是一个手写体数据集,简单说就是一堆这样东西
- MNIST的官网地址是 MNIST; 通过阅读官网我们可以知道,这个数据集由四部分组成,分别是
; - 也就是一个训练图片集,一个训练标签集,一个测试图片集,一个测试标签集;我们可以看出这个其实并不是普通的文本文件或是图片文件,而是一个压缩文件,下载并解压出来,我们看到的是二进制文件,其中训练图片集的内容部分如此
这些二进制数据如何解释呢?在这里我们只针对官网的说法,对训练图片集和训练标签集进行解说,测试集是一样的道理。 - 针对训练标签集,官网上陈述有
官网说法,训练集是有60000个用例的,也就是说这个文件里面包含了60000个标签内容,每一个标签的值为0到9之间的一个数;回到我们的训练标签集上,按上面说的,我们先解析每一个属性的含义,offset代表了字节偏移量,也就是这个属性的二进制值的偏移是多少;type代表了这个属性的值的类型;value代表了这个属性的值是多少;description是对这个的说明;所以呢,这里对上面的进行一下说明,它的说法是“从第0个字节开始有一个32位的整数,它的值是0x00000801,它是一个魔数;从第4个字节开始有一个32位的整数,它的值是60000,它代表了数据集的数量;从第8个字节开始有一个unsigned byte,它的值是??,是一个标签值….”;我们现在针对我们看到的文件进行解说,看图
首先我们知道用sublime打开这个文件(是解压过的),是用十六进制表示的,也就是说里面的每一个数字代表了四个位,两个数字代表了一个字节;我们首先看到偏移量为0字节处0000 0801
它就是代表了魔数,它的值为0000 0801
,这里补充说一下什么是魔数,其实它就是一个校验数,用来判断这个文件是不是MNIST里面的train-labels.idx1-ubyte文件;接着往下看偏移量为4字节处0000 ea60
,我们知道按照上面说过的这个应该是表示容量数,也就是60000,而60000的十六进制就是ea60,满足;再看偏移量为8字节处05
,它就表示我们的标签值了,也就是说第一个图片的标签值为5,后面的也是依此类推; - 接下来我们来看训练图片集,同样从官网上可以看到
其解说与上面的标签文件类似,但是这里还要补充说明一下,在MNIST图片集中,所有的图片都是28×28的,也就是每个图片都有28×28个像素;看回我们的上述图片,其表示,我们的train-images-idx3-ubyte文件中偏移量为0字节处有一个4字节的数为0000 0803
表示魔数;接下来是0000 ea60
值为60000代表容量,接下来从第8个字节开始有一个4字节数,值为28也就是0000 001c
,表示每个图片的行数;从第12个字节开始有一个4字节数,值也为28,也就是0000 001c
表示每个图片的列数;从第16个字节开始才是我们的像素值,用图片说话
;而且每784个字节代表一幅图片
我们可以看到文件的二进制内容同我们分析的是一样的。 - 补充说明:在图示中我们可以看到有一个MSB first,其全称是”Most Significant Bit first”,相对称的是一个LSB first,“Least Significant Bit”; MSB first是指最高有效位优先,也就是我们的大端存储,而LSB对应小端存储;关于大端,小端,可以 参考
2、mnist数据集读取及保存成图片
#include "ReadMnistData.h"int main()
{ReadMnistData rmd;/*读取训练文件并保存成图片格式*/string filename_train_images = "C:\\Users\\lyf\\Desktop\\mnist\\train-images-idx3-ubyte"; //train images 文件路径string filename_train_labels = "C:\\Users\\lyf\\Desktop\\mnist\\train-labels-idx1-ubyte"; //train labels 文件路径string save_train_image_path = "C:\\Users\\lyf\\Desktop\\mnist\\train_images\\"; //train images 保存路径vector<cv::Mat> vec_train_images; //保存读取的train imagesvector<int> vec_train_labels; //保存读取的train labelsrmd.Read_Mnist_Images(filename_train_images, vec_train_images); //读取train imagescout << "-----------------------------" << endl;rmd.Read_Mnist_Labels(filename_train_labels, vec_train_labels); //读取train labelscout << "-----------------------------" << endl;rmd.Save_Mnist_Images(save_train_image_path, vec_train_images, vec_train_labels); //保存train_images//==================================================================================/*读取测试文件并保存成图片格式*/string filename_test_images = "C:\\Users\\lyf\\Desktop\\mnist\\t10k-images-idx3-ubyte"; //test images 文件路径string filename_test_labels = "C:\\Users\\lyf\\Desktop\\mnist\\t10k-labels-idx1-ubyte"; //test labels 文件路径string save_test_image_path = "C:\\Users\\lyf\\Desktop\\mnist\\test_images\\"; //test images 保存路径vector<cv::Mat> vec_test_images; //保存读取的test imagesvector<int> vec_test_labels; //保存读取的test labelsrmd.Read_Mnist_Images(filename_test_images, vec_test_images); //读取test imagescout << "-----------------------------" << endl;rmd.Read_Mnist_Labels(filename_test_labels, vec_test_labels); //读取test labelscout << "-----------------------------" << endl;rmd.Save_Mnist_Images(save_test_image_path, vec_test_images, vec_test_labels); //保存test_imagesreturn 0;
}
最后图片保存的结果如下:
(超详细)读取mnist数据集并保存成图片相关推荐
- 读取MNIST数据集并显示数据集图片 完全解析
# coding: utf-8 import sys, os sys.path.append(os.pardir) # 为了导入父目录的文件而进行的设定 import numpy as np from ...
- 使用MNIST数据集并显示一些图片
from torch.utils.data import DataLoader import matplotlib.pyplot as plt import numpy as np import to ...
- java 绘画心电图_用java程序读取心电图数据并绘制成图片
首先了解一下心电图纸的构成,首先背景是由1mm*1mm的小方格填充的.然后每5个小方格组成 一个大方格,像下面图所示就是心电图的一部分展示效果.心电图在上面绘制的时候 ,横向代表时间(s),纵向代表电 ...
- 下载MNIST数据集并使用python将数据转换成NumPy数组(源码解析)
下载MNIST数据集并使用python将数据转换成NumPy数组 首先来分析init_mnist函数 接下来继续分析load_mnist函数 实现数据集转换的python脚本的代码 显示MNIST图像 ...
- android 读取excel数据并保存为xml文件
今天,简单讲讲android如何 读取excel数据并保存为xml文件. 最近,我这边需要把客户翻译的Excel字符资源作为xml字符资源,当时自己是一个一个的复制,发现效率太低.后来,在网上搜 ...
- TF之DCGAN:基于TF利用DCGAN测试MNIST数据集并进行生成过程全记录
TF之DCGAN:基于TF利用DCGAN测试MNIST数据集并进行生成 目录 测试结果 测试过程全记录 测试结果 train_00_0099 train_00_0799 train_00_0899 t ...
- java通过url获取网页内容_Java语言通过URL读取网页数据并保存到本地文件(代码实例)...
本文主要向大家介绍了Java语言通过URL读取网页数据并保存到本地文件(代码实例),通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. Java通过URL读取网页数据并保存到本地文件(代码 ...
- 读取json格式的图片、文字并保存成图片
读取json格式的图片.文字并保存成图片 说明 从数据库中获取到图片.中文.英文信息后,将其合成json文件,图片格式为base64格式,需要将其转成二进制形式,然后将其保存成图片,将中文.英文信息保 ...
- base64格式的图片数据如何转成图片
base64格式的图片数据如何转成图片 一.总结 一句话总结:不仅要去掉前面的格式串,还需要base64_decode()解码才行. 1 // $base_img是获取到前端传递的值 2 $base_ ...
最新文章
- 黄聪:C#用正则表达式获得指定开始和结束字符串中间的一段文本
- 事物的开始和结束命令分别是什么_人教版小学四年级语文下册期末测试题及答案[1]...
- 2016-05-12 SAP UI5事件注册的问题研究
- Dijkstrala算法
- 重磅发布!阿里云推PostgreSQL 10 高可用版
- 攻击者利用的Windows命令、横向渗透工具分析结果列表
- python编写系统遇到的问题_python编写时遇到的小问题
- linux bitmap save 图片_Linux内核浅析-进程调度时机和过程
- python在机械行业的应用_Python语言程序设计与应用-教学大纲
- 用LaTeX输出离散数学符号表
- 2021-2027全球及中国工业物联网通信产品行业研究及十四五规划分析报告
- 计算机一个小键盘按不出来怎么办,巧妙解决电脑键盘右边的数字键失灵问题
- 右下角弹窗代码_vueamap使用步骤和代码示例
- Black Hat USA 2011: Alexander Polyakov - CTO - ERPScan
- 管理员已阻止你运行此应用。有关详细信息,请与管理员联系。windows10
- 计算机应用基础知识doc,独家稿件:终稿[定稿]计算机应用基础知识全册教案.docOK版...
- 【Deep Learning】Transformers Assemble(PART I)
- 关于自我的剖析 —— 认知(面试:你的缺点是什么)
- A. Binary Decimal acii码 字符 数字的转换 vector容器 sort 排序
- JPEG图像压缩探索_zigzag扫描(原创)