Tensorflow 中 NCHW 和 NHWC的区别:
其中data_format 默认 "NHWC",也可以手动设置为 "NCHW"。这个参数规定了 input Tensor 和 output Tensor 的排列方式。
data_format 设置为 "NHWC" 时,排列顺序为 [B, H, W, C];设置为 "NCHW" 时,排列顺序为 [B, C, H, W]。
以图像RGB为例,具体的效果如下:
这个怎么解释呢?
得从矩阵的表达方式说起,[B, C, H, W] B 个(C个(H(W长的向量))),层层嵌套.
以灰度计算为例, NCHW需要计算完所有的通道才可以得到灰度值,而NHWC则每三个像素,即一个通道计算完毕就可以得到一个点的灰度值.
因此可以看出NHWC形式的数据访存局部性较好.NCHW需要等待计算完所有的通道,占用较大的临时空间.
TensorFlow 为什么选择 NHWC 格式作为默认格式?因为早期开发都是基于 CPU,使用 NHWC 比 NCHW 稍快一些(不难理解,NHWC 局部性更好,cache 利用率高)。
NCHW 则是 Nvidia cuDNN 默认格式,使用 GPU 加速时用 NCHW 格式速度会更快.