图解NCHW与NHWC数据格式

2023-11-07

图解NCHW与NHWC数据格式_田海立@CSDN-CSDN博客_nchw

流行的深度学习框架中有不同的数据格式,典型的有NCHW和NHWC格式。本文从逻辑表达和物理存储角度用图的方式来理解这两种数据格式,最后以RGB图像为例来加深NHWC和NCHW数据存储格式的理解。

一、基本概念
深度学习框架中,数据一般是4D,用NCHW或NHWC表达,其中:

N - Batch
C - Channel
H - Height
W - Width
 

二、逻辑表达
假定N = 2,C = 16,H = 5,W = 4,那么这个4D数据,看起来是这样的:

人类比较直接的理解方式是3D,上图中从三个方向上理解,C方向/H方向/W方向。然后是N方向上,就是4D。

上图中红色标准的数值是这个数据里每个元素的数值。

三、物理存储
无论逻辑表达上是几维的数据,在计算机中存储时都是按照1D来存储的。NCHW和NHWC格式数据的存储形式如下图所示:

3.1 NCHW
NCHW是先取W方向数据;然后H方向;再C方向;最后N方向。

所以,序列化出1D数据:

000 (W方向) 001 002 003,(H方向) 004 005 ... 019,(C方向) 020 ... 318 319,(N方向) 320 321 ...

3.2 NHWC
NHWC是先取C方向数据;然后W方向;再H方向;最后N方向。

所以,序列化出1D数据:

000 (C方向) 020 ... 300,(W方向) 001 021 ... 303,(H方向) 004 ... 319,(N方向) 320 340 ...

四、RGB图像数据举例
表达RGB彩色图像时,一个像素的RGB值用3个数值表示,对应Channel为3。易于理解这里假定N=1,那么NCHW和NHWC数据格式可以很直接的这样表达:

NCHW是

先在一个Channel面上把W方向|H方向上元素存储起来 // R
然后再在另一个Channel切面上把W方向|H方向上元素存储起来 // G
最后一个Channel切面上把W方向|H方向上元素存储起来 // B
这样看起来,就是先把R通道的每个像素都存储;然后存储G通道;再然后B通道。

NHWC是

先把3个Channel上元素存储起来 // 也就是一个像素的RGB
然后再在W方向|H方向上元素存储起来
这样看起来,就是顺序地取像素的RGB数值存储起来

五、不同框架支持
目前的主流ML框架对NCHW和NHWC数据格式做了支持,有些框架可以支持两种且用户未做设置时有一个缺省值:

TensorFlow:缺省NHWC,GPU也支持NCHW
Caffe:NCHW
PyTorch:NCHW
————————————————
版权声明:本文为CSDN博主「thl789」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/thl789/article/details/109037433

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图解NCHW与NHWC数据格式 的相关文章

随机推荐

  • C++学习之工具篇 二:VSCode C++环境配置(Ubuntu篇)

    C 学习之工具篇 二 VSCode C 环境配置 Ubuntu篇 1 VSCode简介 2 VSCode 下载安装 2 1 Snap Store安装方式 2 2 官网下载方式 3 编译环境配置 3 1 安装gcc g 3 2 Cmake 安
  • warning: #223-D: function “TIM4_Init“ declared implicitly

    stm32编写定时器程序时 出现这样一个警告 虽然不影响烧写程序 但是为了消除这个警告 搜索了一些解决方案 但是仍然不能解决问题 1 网络上提到可能没有把头文件在keil软件路径中包含 但是我包含了仍然有问题 2 网络上提到在调用的时候没有
  • c语言如何快速看懂别人的程序,探究如何快速看懂单片机程序方法

    在现实中 我相信有很多刚刚接触单片机的同学 简直是无从下手 打开一个程序 更会被复杂的结构和密密麻麻的代码吓到 产生退缩的想法 这篇文章带你了解一下单片机程序 我对单片机的总结 单片机其实就是一个芯片 内部有若干寄存器 外部有若干引脚 我们
  • Hyperledger Fabric学习笔记——6.账本存储

    1 账本存储概念 peer节点做账本存储 orderer是临时存储区块 peer节点是账本存储的持久化 会改变世界状态 文件系统 区块是存储为文件的 区块索引 用于查询区块 是用levelDB实现的 状态数据库 一般存放区块链最新状态 数据
  • git push解决办法: ! [remote rejected] master -> master (pre-receive hook declined)

    前天准备上传一个project到GitLab上 但是试了很多次都上传不上去 报错如下 remote rejected master gt master pre receive hook declined 截图 一开始还以为自己用户名和密码错
  • PHP字符串反转

    php自带反转函数strrev可以轻松将 hello world 改写为 dlrow olleh 但如果要自己写一个反转函数应该怎么实现呢 1 function myStrRev str len strlen str res for i 1
  • kobject_uevent_env 内核通知android有状态变化的一种方法

    以下文字来源网络 kernel include
  • 一个奇怪的GCD内存不释放的问题

    这个问题是我的同学提出来的 原帖在http bbs csdn net topics 390933411 大概是这样 pre class objc IBAction touchToCreateThread id sender int i 10
  • qcad编译001

    qcad plugin 报错 pluginclass not name type goetz 2011年2月27日 02 22 qmake s variables are not available in the C preprocesso
  • Linux大全

    奔跑吧Linux内核卷1 基础架构 第2版 https arch arm boot git clone https exports exports PATH pwd和 PWD的联系与区别 https blog csdn net weixin
  • c# .netcore oracle连接工具类

    1 先右键 添加NeGet包 引入Oracle ManagedDataAccess dll 2 将该类加入项目中 工具类 using System using System Collections using System Collecti
  • vue使用高德地图,精确定位&ip定位,获取城市、地区位置

    1 高德地图准备 点进入网址 https lbs amap com api javascript api guide abc prepare 1 注册开发者账号 2 进入控制台 3 申请高德地图key 2 在页面添加 JS API 的入口脚
  • 《Java程序设计》实验报告

    实验内容 面向对象程序设计 1 定一个名为Person的类 其中含有一个String类型的成员变量name和一个int类型的成员变量age 分别为这两个变量定义访问方法和修改方法 另外再为该类定义一个名为speak的方法 在其中输出name
  • 面试利器(一)-------交换排序(冒泡排序和快速排序)

    最近我在找工作 看了一下每一个公司的要求 几乎每个公司都要求我们熟练掌握几种基本的算法 下面我用最简单的语言写写我的理解 抓住关键我们很快就能理解几种基本的算法 全部都以从小到大排列 一 冒泡排序 抓住关键字 交换 两两交换 冒泡 向上浮动
  • 基于SSM+layui实现用户注册新增功能

    注册新增原理 判断用户名与数据表中信息是否相同 相同则返回用户新增失败 反之新增成功 注册用户密码使用md5加密方式存储到数据库 一 实现效果 用户新增界面 二 数据表 user 三 代码实现 1 bean层 UserInfo AllArg
  • 亲测有效,如何用ChatGPT 生成高质量原创视频

    尽管ChatGPT目前缺乏视频生成的能力 但我们可以借助插件实现视频生成 特别是对于那些从事Tiktok海外运营的用户而言 Visla和HeyGen是我目前测试的两款可生成视频的插件 首先登陆您的ChatGPT帐号 并单击邮箱 勾选设置 S
  • CUDA的作用

    显卡中CUDA是什么及作用介绍 CUDA Compute Unified Device Architecture 显卡厂商NVidia推出的运算平台 CUDA是一种由NVIDIA推出的通用并行计算架构 该架构使GPU能够解决复杂的计算问题
  • 联合memcache,repcached,magent,monit四个组件搭建高可用集群方案

    一 基本介绍 1 组件承担的角色 1 memcache负责缓存对象 2 repcached负责单主单从的同步备份 3 magent代理实现N主N备 4 monit监听以上组件的各个实例端口 保证故障自动重启 2 集群思路 1 利用repca
  • Unlock PeopleSoft Objects All at Once

    Change control is used in Application Designer to lock definitions and track history changes for each object Change cont
  • 图解NCHW与NHWC数据格式

    图解NCHW与NHWC数据格式 田海立 CSDN CSDN博客 nchw 流行的深度学习框架中有不同的数据格式 典型的有NCHW和NHWC格式 本文从逻辑表达和物理存储角度用图的方式来理解这两种数据格式 最后以RGB图像为例来加深NHWC和