通过cifar-10数据集理解numpy数组的长(H)、宽(W)、通道(C)

news2024/9/30 9:34:21

文章目录

    • 1、CIFAR-10数据集介绍
      • 1.1 CIFAR-10数据集的构成
      • 1.2 batches.meta
      • 1.3 data_batch_n.py & test_batch.py
    • 2、获取一张图片的data数据
      • 2.1 反序列化获得numpy数据
      • 2.2 清楚numpy中的H、W、C的含义
      • 2.3 清楚RGB图片在numpy中的表示
    • 3、处理图片数据的代码

1、CIFAR-10数据集介绍

1.1 CIFAR-10数据集的构成

  CIFAR-10数据集由60000张32x32的彩色图像组成,分为10类,每类有6000张图像。有50000张训练图像和10000张测试图像。

  该数据集被分为五个训练集的batch和一个测试集的batch,每个batch有10000张图像。

  测试集的batch包含从每个类中随机选择的1000张图像。

  训练集的batch包含其余的随机顺序的图像,但一些训练集的batch可能包含一个类别的图像多于另一个。
在它们之间,训练集的batch恰好包含了来自每一类的5000张图像。

1.2 batches.meta

  • num_cases_per_batch: 10000
  • label_names: [‘airplane’, ‘automobile’, ‘bird’, ‘cat’, ‘deer’, ‘dog’, ‘frog’, ‘horse’, ‘ship’, ‘truck’]
  • num_vis: 3072

1.3 data_batch_n.py & test_batch.py

  • batch_label
  • labels
  • data
  • filenames

2、获取一张图片的data数据

2.1 反序列化获得numpy数据

# cifar10的数据在python中使用picklec模块序列化并保存在文件中
def unpickle(file):
    import pickle
    with open(file, 'rb') as fo:
        dict = pickle.load(fo, encoding='bytes') 
    return dict

label_loc = '../raw_Data/cifar-10-batches-py/batches.meta'
label_dict = unpickle(label_loc)

pic_loc = '../raw_Data/cifar-10-batches-py/data_batch_1'
pic_dict = unpickle(pic_loc)

  在官网这样介绍data:它保存了10000 × \times × 3072的uint8的numpy数组。该数组的每一行都存储了一个32 × \times × 32的彩色图像。前1024个条目包含红色通道的值,接下来的1024个是绿色,最后的1024个是蓝色。图像是按行主顺序存储的,所以数组的前32个条目是图像第一行的红色通道值。
  行主顺序,顾名思义,就是把图片的宽按顺序存储在数组中。每一个像素代表着一个值(像素点的模糊程度),每一个颜色通道有 (32 × \times × 32) 1024个值。RGB图片一共有三个通道,故每一张图片有 (3 × \times × 1024) 3074个值。

2.2 清楚numpy中的H、W、C的含义

  长宽高,分别是numpy数组的三个维度。可以这样理解:这是一个三层嵌套的数组,对第一层数组的取len函数,获得的取值是高度;对第二层数组的取len函数,获得的取值是宽度;第三层数组的取len函数,获得的取值是通道数。
  读取data数据,给出直观理解:

import numpy as np
array = np.reshape(pic_dict[b'data'][9999], (3, 32, 32)).astype('uint8')

  下面框起来的是array数组的高,一共有三个:
H
  下面框起来的是array数组的宽,一共有32个:
W
  最后框起来的是array数组的通道数,一共有32个:
C

2.3 清楚RGB图片在numpy中的表示

  这是处理后的一张cifar-10图片的部分数组。可以清楚地看到,我用红、绿、蓝标好的通道数。该图片是处理后的data_batch_1中的第9999即最后一张图片,处理的代码我将在第三部分给出。

  我按照上图数组的表示,用PPT画了一下这张图片像素的表示:

在这里插入图片描述

3、处理图片数据的代码

import numpy as np
array = np.reshape(pic_dict[b'data'][9999], (3, 32, 32)).astype('uint8')
print(array)
# 可以理解成矩阵的转置
array = np.transpose(array, (1, 0, 2))
print(array)
array = np.transpose(array, (0, 2, 1))
print(array)
# RGB变成BGR
# [...,::-1]是对最内层的列表进行逆序取值
array = array[...,::-1]
print(array)
import cv2
# # 图像是按行主顺序存储的,所以前32个数值是红色通道
cv2.imwrite('图片.png', array)
  1. 难点一:理解np.shape重构一维数组的方法,且为什么要以(3, 32, 32)的方式读取。
  2. 难点二:理解np.transpose的调换x、y、z轴的顺序,转置的目的是变成RGB图片格式的数组。
    我相信在第二部分中的讲解,以及对照代码的分布输出后,你会有一个全新的理解。
    原创不易,如果觉得不错,请给个支持,谢谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/687419.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

渗透测试实战-BurpSuite 使用入门

前言 近期笔者在学习 web 渗透测试的相关内容,主要是为了公司之后的安全产品服务。渗透测试本身在学习过程中还是很有意思的,有一种学习到了之前想学但是没学的黑客技术的感觉,并且对笔者已掌握的许多知识做了有益的补充。要学习渗透测试&…

ThinkPHP 对接美团大众点评团购券(门票)

一、功能简要介绍 1、根据需求,用户在美团大众点评中所购买的门票在自己的系统上可以核销,同时把核销信息存储到自己的系统里。2、美团点评API文档地址:[https://open.dianping.com/document/v2?rootDocId5000](https://open.dianping.com/…

PostgreSQL13.1

目录 1. PostgreSQL简介1.1 PostgreSQL是什么?1.2 PostgreSQL数据库的优缺点是什么?1.2.1 PostgreSQL的主要优点如下:1.2.2 PostgreSQL的应用劣势如下: 1.3 PostgreSQL不同大版本之间的特性比较1.4OpenGauss与PostgreSQL的对比1.4…

管理类联考——逻辑——知识篇——分析推理——三、分组——haimian

分组 题型特征 题干给出5-7个对象和2-5个限制条件,需根据题干要求分为2~3组。要注意题干中需分为几组,每组几个对象,对象有哪些限制因素,并灵活运用排除法、假设法、分析法、数字法、假言命题性质等方法解题。 思维导图 思路点…

技术管理第三板斧招聘与解聘-找到人

1.人才要自己去找、去抢 从团队的角度出发,Leader“主动出击、寻找合适人选”的观念符合逻辑,你既然是团队的一号位,自然最应该了解团队现状,以及团队需要的人选。与此同时,找到合适的人对你的影响最大而非 HR&#x…

大势智慧软硬件技术答疑第四期

1.重建大师是否支持bigmap绘制的范围线? 答:目前重建大师仅支持面格式的,bigmap的还没试验过,globalmapper或者arcgis是可以的。 2.为什么6.1建模的时候引擎一直是等待呢? 答:检查一下引擎面板引擎监控目录…

软件测试人员应该如何介绍自己测试过的项目工作【商城项目实战讲解】

测试人员在找工作的过程中,通常有一个问题是很难绕开的。就是要如何向别人介绍自己之前做过的项目。下面我们就这个问题简单的做一些分析。 要解决这个问题,大体上可以分为如下几个步骤: 1、对项目进行基本介绍 2、说明自己负责测试的模块 …

vue-router之hash与history,以及nginx配置

本篇讲解前端项目的路由模式(以vue-router为例),以及history模式下的项目部署问题。 vue-router的路由模式可以通过指定mode属性值控制,可选值:“hash” 、“history”、 “abstract” , 默认:“…

一篇文章告诉你什么是—Selenium的元素等待

前言 今天我们来说说selenium的元素等待,废话不多说直接开始吧。 1、元素等待介绍 WebDriver定位页面元素时如果未找到,会在指定时间内一直等待的过程。为了保证脚本运行的稳定性,需要脚本中添加等待时间。 2、为什么要设置元素等待 在元…

OpenStack(4)--NameSpace实现不同项目(租户)重叠网段

openstack通过namespace将不同项目(租户)的网络隔离,每个项目的管理员都需要对项目网络进行规划建设,这就导致不同项目之间会重复使用到某些网段,例如192.168.X.X就是管理员习惯使用的网段。 上一次我们新建位于vxlan…

基于Java的景区售票信息管理系统

1.设计要求 (1)要求每个学生独立完成期末作品,在遇到问题时,同学之间可以相互讨论,但切忌复制他人程序。 (2)根据期末作品题目,自己编写程序,上机调试程序,…

uniapp视频播放器

微信小程序使用hic-video-player app(android和ios)使用好用视频播放器注:用的是旧版本的这个组件 目前只有app中支持竖屏横批选集 android视频全屏是通过 beforeDestroy() {// #ifdef APP-VUE// 页面关闭时关闭沉浸模式if (uni.getSystemInfoSync().platform &quo…

【FFmpeg实战】解复用实战

原文链接:https://blog.csdn.net/u014078003/article/details/128554153 1.封装格式相关函数 avformat_alloc_context():负责申请一个AVFormatContext结构的内存,并进行简单初始化,这个函数可以不用手动调用,内部会自动调用。avf…

【无标题】NXP i.MX 6ULL工业核心板硬件说明书( ARM Cortex-A7,主频792MHz)

1 硬件资源 创龙科技SOM-TLIMX6U是一款基于NXP i.MX 6ULL的ARM Cortex-A7高性能低功耗处理器设计的低成本工业级核心板,主频792MHz,通过邮票孔连接方式引出Ethernet、UART、CAN、LCD、USB等接口。核心板经过专业的PCB Layout和高低温测试验证&…

怎么才能提高自动化测试的覆盖率,华为大佬教你一招!

前言 自动化测试一直是测试人员的核心技能,也是测试的重要手段之一。尤其是在今年所谓的互联网寒冬的行情下,各大企业对测试人员的技术水平要求的很高,而测试人员的技术水平主要集中在三大自动化测试领域,再加测试辅助脚本的编写…

智慧园区能源管理系统建设方案

随着能源资源的日益紧缺和环境保护意识的不断提高,智慧园区能源管理系统建设成为了当前能源管理的热点话题。智慧园区能源管理系统是一种集成化的能源管理平台,可以实现对园区内各种能源的实时监测、分析和管理,从而达到优化能源配置、提高能…

Python 学习之NumPy(一)

文章目录 1.为什么要学习NumPy2.NumPy的数组变换以及索引访问3.NumPy筛选使用介绍筛选出上面nb数组中能被3整除的所有数筛选出数组中小于9的所有数提取出数组中所有的奇数数组中所有的奇数替换为-1二维数组交换2列生成数值5—10,shape 为(3,5)的二维随机浮点数 NumP…

对一大厂游戏测试员的访谈实录,带你了解游戏测试

今天采访了一个在游戏行业做测试的同学,他所在的游戏公司是做大型多人在线角色扮演类的游戏,类似传奇游戏。他所在的公司目前有1200多人,是上市公司,目前游戏产品在国内海外都有市场。 因为我是一个对游戏无感的人,所…

【C++ 程序设计】第 7 章:输入/输出流

目录 一、流类简介 二、标准流对象 三、控制I/O格式 (1)流操纵符 (2)标志字 四、调用cout的成员函数【示例一】 五、调用 cin 的成员函数 (1)get() 函数 (2)getline()…

高考选什么专业好?适合考公务员的10大热门专业,了解一下!

高考是人生的分水岭,它是青春和未来的交汇处。高考成绩的优劣将对考生未来的发展产生深远的影响。作为学生们人生中重要的一站,高考不仅考验着学生的学业能力,也考验着他们的心理素质和思维能力。 高考结束后,众多考生面临的一个重…