| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> mnist数据集的获取、访问、使用例子 -> 正文阅读 |
|
[人工智能]mnist数据集的获取、访问、使用例子 |
目录 原文链接:http://www.juzicode.com/image-mnist-get-access-apply mnist是一个包含0~9的阿拉伯数字手写字体数据集,它由60000个样本组成的训练集和10000个样本组成的测试集。其中每种数据集又分别包含2个文件,分别是图片文件和标签文件。 1、获取mnist数据数据集下载地址:http://yann.lecun.com/exdb/mnist/,包含4个文件: train-images-idx3-ubyte.gz: 60000个训练图片 网站上提供的是压缩版本,下载到本地后先进行解压。 2、mnist文件格式每个mnist文件的格式如下图所示: dimension N的值由magic numbe决定,N=LSB(magic number)-1,也就是magic number最后一各字节减1得到。其中dimension0的值为样本数量。文件头大小为1个4字节的magic number+(N+1)个4字节的dimension。这里先减一再加一,绕来绕去是为了符合起始从0开始的习惯,实际上magic number最后一个字节就是dimension的数量。 前面讲的是通用格式,下面是对应到图片和标签文件的格式。 图片文件train-images-idx3-ubyte和t10k-images-idx3-ubyte的magic number都是0x00000803,其中0x08表示data部分的类型为uchar型,0x03表示dimension的数量为3,其中dimension0表示数据的个数,train-images-idx3-ubyte有60000个,t10k-images-idx3-ubyte有10000个,2个图片文件的dimension1和dimension2都为28,表示图片的高宽(行列数),这样文件头长度head_len=4字节*1(magic number个数)+4字节*3(dimension个数)=16字节。 剩下的内容为数据部分,每28*28个字节为一张图片,这样第m张图片的起始位置就是:16(文件头长度)+28(高)*28(宽)*m。 标签文件train-labels-idx1-ubyte.和t10k-labels-idx1-ubyte的magic number都是0x00000801,其中0x08表示data部分的类型为uchar型,0x01表示dimension的数量为1,其中dimension0表示数据的个数,train-labels-idx1-ubyte有60000个,10k-labels-idx1-ubyte有10000个。标签文件的文件头长度head_len=4字节*1(magic number个数)+4节*1(dimension个数)=8字节。 剩下的内容为数据部分,每个字节表示一个标签。 有了前面对文件的分析,下面根据分析结果对文件做读出操作。 3、从文件读出数据3.1、读出文件头首先是获取文件头中的样本数量和文件头的长度,有了文件头长度就可以根据文件头长度偏移到相应位置获取某一个图片或标签的值。
入参filename是图片或标签的文件名称。 打开文件后,首先读出的4个字节是其magic number,需要将大尾端模式的字节数据转换为int类型。然后将magic number和0xff相与得到其最后一个字节,表示dimension的数量,然后循环读出所有的dimension的值。其中dimension[0]表示样本的数量,文件头的长度为4*len(dimension)+4。最后返回文件头长度和样本数量。 3.2、读出图片数据有了文件头信息,利用这些信息就可以获取某个指定偏移位置的图片或者标签,下面我们现来看获取图片数据:
入参pf为打开文件对象,head_len为get_head_info()返回的文件头长度,offset表示要获取的第offset个图像。 该函数中首先创建一个28×28大小的numpy数组,然后将文件指针指向文件的head_len+IMAGE_ROW*IMAGE_COL*offset处,也就是第offset个图像的起始位置。接下来读出IMAGE_ROW*IMAGE_COL个数据,依次赋值给numpy数组,然后返回该数组,也就得到了第offset个图像的数据。 3.3、读取标签数据接下来看如何获取标签数据:
入参pf为打开文件对象,head_len为get_head_info()返回的文件头长度,offset表示要获取的第offset个标签。 首先将文件指针指向文件的head_len+offset处,也就是第offset个标签的起始位置。接下来读出1个字节的数据,转换为int类型后返回。 4、应用例子4.1、显示标签和图片下面这个例子利用前面写的几个函数显示指定的某个偏移开始的图像:
首先根据type决定是访问训练集还是测试集,数据集文件放在file_path子目录下。然后读取文件头信息,根据读出的文件头和读出的样本数量和传入的想显示的样本数量做对比,检查样本数量并限制其范围。接下来打开图片文件和标签文件,并读出数据在matplotlib里显示offset、标签值、图片。 4.2、将图片数据集转换为tif图片文件下面这个例子从图片文件中第offset个偏移开始,读出sample_count个图片,并生成tif文件:
这个例子首先仍然根据type决定是访问训练集还是测试集,数据集文件放在file_path子目录下。然后读取文件头信息,根据读出的文件头和读出的样本数量,检查样本数量并限制其范围。接下来打开图片文件,并从文件中读出单张图片再使用imageio生成tif文件。 推荐阅读: |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 4:39:48- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |