图解NCHW与NHWC数据格式
原文作者:田海立@CSDN
原文地址:
【图解NCHW与NHWC数据格式】流行的深度学习框架中有不同的数据格式 , 典型的有NCHW和NHWC格式 。 本文从逻辑表达和物理存储角度用图的方式来理解这两种数据格式 , 最后以RGB图像为例来加深NHWC和NCHW数据存储格式的理解 。
一、基本概念深度学习框架中 , 数据一般是4D , 用NCHW或NHWC表达 , 其中:
- N - Batch
- C - Channel
- H - Height
- W - Width
文章插图
人类比较直接的理解方式是3D , 上图中从三个方向上理解 , C方向/H方向/W方向 。 然后是N方向上 , 就是4D 。
上图中红色标准的数值是这个数据里每个元素的数值 。
三、物理存储无论逻辑表达上是几维的数据 , 在计算机中存储时都是按照1D来存储的 。 NCHW和NHWC格式数据的存储形式如下图所示:
文章插图
3.1 NCHWNCHW是先取W方向数据;然后H方向;再C方向;最后N方向 。
所以 , 序列化出1D数据:
000 (W方向) 001 002 003 , (H方向) 004 005 ... 019 , (C方向) 020 ... 318 319 , (N方向) 320 321 ...
3.2 NHWCNHWC是先取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
NHWC是
- 先把3个Channel上元素存储起来 // 也就是一个像素的RGB
- 然后再在W方向|H方向上元素存储起来
五、不同框架支持目前的主流ML框架对NCHW和NHWC数据格式做了支持 , 有些框架可以支持两种且用户未做设置时有一个缺省值:
- TensorFlow:缺省NHWC , GPU也支持NCHW
- Caffe:NCHW
- PyTorch:NCHW
原文作者:田海立@CSDN
原文地址:
- C++|嵌入式开发:C++中的结构与类
- 苏宁易购|透视2022年家电市场 头部家电品牌与苏宁易购敲定提升策略
- 摄像头|李彦宏《智能交通》与百度Apollo,还是小瞧它的胃口了!
- 智能网联汽车|我国智慧城市基础设施与智能网联汽车协同发展第二批试点城市公布
- 原创|别花冤枉钱,我教你怎么样给电脑装系统,安装版与Ghost都不难!
- 华为|12月刚开始,手机圈就传来两个重磅消息,与iPhone、华为有关
- 腾讯云|白银市政府与腾讯云达成战略合作
- 华为|Windows 11明年将让用户自定义开始菜单,显示更多应用与推荐项目
- playstation5|一加10 Pro传言消息汇总,有一点与往年不同
- |与任正非并称“二任”,把千亿公司给国家,堪称中国“并购之王”