Cifar-10 数据格式分析
Cifar-10 的介绍可去官网阅读,也可参照我之前整理的《笔记:CIFAR-01 和 CIFAR-100 数据集内容和格式详解》
1. 下载 Cifar-10 数据
本文下载了 Cifar-10 的 Python 语言版本,解压后放在文件夹:...\cifar-10-python\cifar-10-batches-py
中。其中包含如下文件:
2. 读取 Cifar-10 数据
按照官网说明,这些数据可以用如下 Python 代码读取:
def unpickle(file):import picklewith open(file, 'rb') as fo:dict = pickle.load(fo, encoding='bytes')return dictdict = unpickle('/home/yeping/cifar-10/cifar-10-batches-py/data_batch_1')
print(dict)
------------- run -------------
{b'batch_label': b'training batch 1 of 5',
b'labels': [6, 9, 9, 4, 1,..., 5],
b'data': array([[ 59, 43, 50, ..., 140, 84, 72],[154, 126, 105, ..., 139, 142, 144],[255, 253, 253, ..., 83, 83, 84],...,[ 62, 61, 60, ..., 130, 130, 131]], dtype=uint8),
b'filenames': [b'leptodactylus_pentadactylus_s_000004.png', b'camion_s_000148.png', b'tipper_truck_s_001250.png', b'american_elk_s_001521.png', b'station_wagon_s_000293.png', ... , b'cur_s_000170.png']
}
上面代码读取并打印了 data_batch_1
文件。其实文件的二进制格式不必细究,我们只需要关心遵循官网说明用 Python 读出的内容即可。数据以字典的形式读出,内容包括如下几个部分
字段 | 字段名称 | 数据 | 说明 |
---|---|---|---|
batch_label | 批文件标签 | ‘training batch 1 of 5’ | 当前文件的标题或说明 |
label | 标签 | [6, 9, 9, 4, 1,…, 5] | 图像的分类标签,shape = (10000,) |
data | 数据 | [[ 59, 43, 50, …, 140, 84, 72],… | 图像数据, shape = (10000, 3072) |
filename | 文件名 | … | 图像的文件名 |
数据的 shape 可以用下面的代码读取:
print(np.array(dict[b'labels']).shape) # 转成 np.array
print(dict[b'data'].shape) # 这个本来就是 np.array
------------- run -------------
(10000,)
(10000, 3072)
附:官网关于 Cifar-10 的说明
- 数据——一个10000x3072 numpy的uint8s数组。数组的每一行存储一个32x32彩色图像。前1024个条目包含红色通道值,后1024个条目包含绿色通道值,最后1024个条目包含蓝色通道值。图像以行主顺序存储,因此数组的前32个条目是图像第一行的红色通道值。
- 标签——10000个数字的列表,范围为0-9。索引i处的数字表示数组数据中第i个图像的标签。
3. 显示图形
数组中,每 3072 个字节代表一幅 32x32 分辨率的彩色图像。前1024个条目包含红色通道值,后1024个条目包含绿色通道值,最后1024个条目包含蓝色通道值。图像以行主顺序存储,因此数组的前32个条目是图像第一行的红色通道值。
下面的代码首先把 3072 个字节 reshape 成 3x32x32 格式。但是,plt.imshow 方法现实的图像格式为 32x32x3。因此,用 transpose 把通道位置置换一下,就能正常显示了。
img = dict[b'data'][0]
img = img.reshape(3,32,32)#print(img)
import matplotlib.pyplot as plt
plt.imshow(np.transpose(img, (1, 2, 0)))
其中,np.transpose(img, (1, 2, 0))
的通道转模式如下:
通道编号 | 转换前的原数据通道 | 转换后的原数据通道位置分布 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 2 |
2 | 2 | 0 |
也就是说,原来的0通道要转换到2通道位置,原来的1通道转换到0通道位置,原来的2通道转移到1通道位置。
4. 总结
代码汇总:
# Cifar-10 官方提供的数据读取代码
def unpickle(file):import picklewith open(file, 'rb') as fo:dict = pickle.load(fo, encoding='bytes')return dict# 读取数据,并显示数据结构
dict = unpickle('/home/yeping/cifar-10/cifar-10-batches-py/data_batch_1')
print(np.array(dict[b'labels']).shape)#adwsdfs
print(dict[b'data'].shape)# 把数据结构调整成图像(Cifar-10 数据结构与神经网络输入层的结构一致)
img=dict[b'data'][0]
img=img.reshape(3,32,32)# 显示图像,需要把数据结构调整成正常的图像格式
import matplotlib.pyplot as plt
plt.imshow(np.transpose(img, (1, 2, 0)))
输出结果:
Cifar-10 数据格式分析相关推荐
- 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第10章 分析句子的意思
第10章 分析句子的意思 10.1 自然语言理解 查询数据库 自然语言.语义和逻辑 10.2 命题逻辑 10.3 一阶逻辑 一阶定理证明 一阶逻辑语言总结 真值模型 独立变量和赋值 量化 量词范围歧义 ...
- 常见视频原始数据格式分析 — YUV
1. YUV 简介 YUV 是比较常用的原始视频数据数据格式,视频采集芯片输出的码流大部分都是 YUV 数据流形式,而视频处理(如 H264.H265编码等),也是在原始 YUV 码流进行编码和解析. ...
- BT1120数据格式分析
目录 1. 概述 2. 图像的基本格式 3. 同步头分析 4.行列数分析 5. 校验分析 6. 结束 1. 概述 本文将利用LMH0341所采集到的实际数据,对照SMPTE 292M和SMPTE 27 ...
- kernel 3.10代码分析--KVM相关--虚拟机创建\VCPU创建\虚拟机运行
分三部分:一是KVM虚拟机创建.二是VCPU创建.三是KVM虚拟机运行 第一部分: 1.基本原理 如之前分析,kvm虚拟机通过对/dev/kvm字符设备的ioctl的System指令KVM_CREAT ...
- nexbox本地网络调试工具下载_「下载」 Windows 10 WinDBG 分析转储日志和蓝屏日志排查错误原因...
使用Windows 10相对来说出现蓝屏概率还是很高的,但微软提供的错误代码有时候可能无法帮助我们解决问题. 所以我们需要使用更专业的工具来分析系统记录的日志,有日志进行排查后就可以定位到具体什么原因 ...
- 深度学习入门——利用卷积神经网络训练CIFAR—10数据集
CIFAR-10数据集简介 CIFAR-10是由Hinton的学生Alex Krizhevsky和Ilya Sutskever整理的一个用于普适物体的小型数据集.它一共包含10个类别的RGB彩色图片: ...
- kernel 3.10代码分析--KVM相关--虚拟机运行
1.基本原理 KVM虚拟机通过字符设备/dev/kvm的ioctl接口创建和运行,相关原理见之前的文章说明. 虚拟机的运行通过/dev/kvm设备ioctl VCPU接口的KVM_RUN指令实现,在V ...
- 游侠区块链10月10日分析:多头释放,假期入手筹码止盈收米。
听着广场舞音乐写点东西还是不错的,听着听着,本来都没听过的歌,都会跟着摇头晃脑开始哼了.社会那么复杂,都没被"洗脑",着实被广场舞洗了一把.如果一直是看着跳,或许几个月,一年,也能 ...
- XSX和PS5对标的电脑配置(2021年12月10日分析)
Xbox Series X对标电脑配置(2021年12月10日下午) 前言 最近买了台小米电视86,光看电视感觉不过瘾,想玩点游戏. 但是专门买一个XSX或者PS5又感觉没必要,因为我也不是游戏重度爱 ...
- GPT分区数据格式分析(图已补上)
1. 背景与前言 随着技术的不断提高,电子产品的集成度变得越来越高,硬盘是这几年中的一个突出产品,近年来,硬盘容量不断提升,从500G到1TB,目前已经能以很便宜的价格买到3TB的硬盘. 分区就是把一 ...
最新文章
- 邻接表终极解析===和vector写法的区别
- Maven让资源文件处理插件能够解析资源文件中的Maven属性
- 以不同的维度去看待问题
- JQuery绑定事件 时如何传递参数
- java dateTime + long
- 数字图像处理基础与应用 第四章
- 连接路由器后电脑连不上网_猫、路由器、交换机的区别
- NB-IoT 的低功耗分析,我们是怎么做的
- matlab实现拉格朗日插值法后的实验感想
- 一个被数字化的职场技术人
- android回传数据实验报告,传热综合实验实验报告.doc
- 判断数是否为素数与素数输出
- 图像处理笔记4-霍夫变换直线检测、圆检测
- Mybatis源码解析——入门级
- 2022前端都考察些什么
- J-Word Search
- 根据激光雷达点云中点的坐标计算ring的值
- Magic Mouse2 断开连接的解决方法
- 2018第一季度工作总结-遇到的困难和解决
- 机器人中的卡尔曼滤波算法——机器人定位