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 数据格式分析相关推荐

  1. 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第10章 分析句子的意思

    第10章 分析句子的意思 10.1 自然语言理解 查询数据库 自然语言.语义和逻辑 10.2 命题逻辑 10.3 一阶逻辑 一阶定理证明 一阶逻辑语言总结 真值模型 独立变量和赋值 量化 量词范围歧义 ...

  2. 常见视频原始数据格式分析 — YUV

    1. YUV 简介 YUV 是比较常用的原始视频数据数据格式,视频采集芯片输出的码流大部分都是 YUV 数据流形式,而视频处理(如 H264.H265编码等),也是在原始 YUV 码流进行编码和解析. ...

  3. BT1120数据格式分析

    目录 1. 概述 2. 图像的基本格式 3. 同步头分析 4.行列数分析 5. 校验分析 6. 结束 1. 概述 本文将利用LMH0341所采集到的实际数据,对照SMPTE 292M和SMPTE 27 ...

  4. kernel 3.10代码分析--KVM相关--虚拟机创建\VCPU创建\虚拟机运行

    分三部分:一是KVM虚拟机创建.二是VCPU创建.三是KVM虚拟机运行 第一部分: 1.基本原理 如之前分析,kvm虚拟机通过对/dev/kvm字符设备的ioctl的System指令KVM_CREAT ...

  5. nexbox本地网络调试工具下载_「下载」 Windows 10 WinDBG 分析转储日志和蓝屏日志排查错误原因...

    使用Windows 10相对来说出现蓝屏概率还是很高的,但微软提供的错误代码有时候可能无法帮助我们解决问题. 所以我们需要使用更专业的工具来分析系统记录的日志,有日志进行排查后就可以定位到具体什么原因 ...

  6. 深度学习入门——利用卷积神经网络训练CIFAR—10数据集

    CIFAR-10数据集简介 CIFAR-10是由Hinton的学生Alex Krizhevsky和Ilya Sutskever整理的一个用于普适物体的小型数据集.它一共包含10个类别的RGB彩色图片: ...

  7. kernel 3.10代码分析--KVM相关--虚拟机运行

    1.基本原理 KVM虚拟机通过字符设备/dev/kvm的ioctl接口创建和运行,相关原理见之前的文章说明. 虚拟机的运行通过/dev/kvm设备ioctl VCPU接口的KVM_RUN指令实现,在V ...

  8. 游侠区块链10月10日分析:多头释放,假期入手筹码止盈收米。

    听着广场舞音乐写点东西还是不错的,听着听着,本来都没听过的歌,都会跟着摇头晃脑开始哼了.社会那么复杂,都没被"洗脑",着实被广场舞洗了一把.如果一直是看着跳,或许几个月,一年,也能 ...

  9. XSX和PS5对标的电脑配置(2021年12月10日分析)

    Xbox Series X对标电脑配置(2021年12月10日下午) 前言 最近买了台小米电视86,光看电视感觉不过瘾,想玩点游戏. 但是专门买一个XSX或者PS5又感觉没必要,因为我也不是游戏重度爱 ...

  10. GPT分区数据格式分析(图已补上)

    1. 背景与前言 随着技术的不断提高,电子产品的集成度变得越来越高,硬盘是这几年中的一个突出产品,近年来,硬盘容量不断提升,从500G到1TB,目前已经能以很便宜的价格买到3TB的硬盘. 分区就是把一 ...

最新文章

  1. 邻接表终极解析===和vector写法的区别
  2. Maven让资源文件处理插件能够解析资源文件中的Maven属性
  3. 以不同的维度去看待问题
  4. JQuery绑定事件 时如何传递参数
  5. java dateTime + long
  6. 数字图像处理基础与应用 第四章
  7. 连接路由器后电脑连不上网_猫、路由器、交换机的区别
  8. NB-IoT 的低功耗分析,我们是怎么做的
  9. matlab实现拉格朗日插值法后的实验感想
  10. 一个被数字化的职场技术人
  11. android回传数据实验报告,传热综合实验实验报告.doc
  12. 判断数是否为素数与素数输出
  13. 图像处理笔记4-霍夫变换直线检测、圆检测
  14. Mybatis源码解析——入门级
  15. 2022前端都考察些什么
  16. J-Word Search
  17. 根据激光雷达点云中点的坐标计算ring的值
  18. Magic Mouse2 断开连接的解决方法
  19. 2018第一季度工作总结-遇到的困难和解决
  20. 机器人中的卡尔曼滤波算法——机器人定位

热门文章

  1. P2P5 | Hybrid PLL
  2. SpringBoot-Binder的使用
  3. feign 序列化_Spring Feign 序列化机制
  4. [COCI2017-2018#5] Olivander
  5. canal实现mysql同步到clickhouse
  6. 手机号码在线实名校验(免开发PC版)使用说明书
  7. 基于Qt5模拟企业微信聊天界面(QWidget)
  8. Robotaxi公司做L2前装量产,机遇与挑战并存
  9. 程考网:一建有哪些具体备考方法?
  10. HCL安装方法,优化调节版。