高维数组理解
以 [B,C,D,H,W]
为例,可以当作形状维度和数据维度来理解,一般来说,B,H,W
都是当作形状,常见的处理主要围绕中间两个进行,初步来看,可以视为B
张H,W
的图片,然后图片的每个像素的特征为长度为C*D
的向量组成,如果将这个向量划分为D
份的话,每份的长度为C
,因为每个像素都有D
份,所以可以将图片拆分为D
张,每张图片的每个像素特征长度为C
。现在就成了B
批数据,每批D
张图片,图片的通道数为C
,此时数据存储在通道数C
中,也就是每个数据就是长度为C
的向量,维度C
成了数据维度,其他都是形状维度。如果将之前的划分改为C
份长度为D
的向量,同理,就成了B
批数据,每批C
张图片,图片的通道数为D
,注意,这里和原来的通道的含义相差甚远。所有这些操作其实都是源自于数据存储是连续的缘故,这些数据存储在连续的内存空间中,相当于一个超长的向量,形状维度就是将向量进行迭代分段。这里就是先将整个数据划分为B
批,然后每批又划分为H
份,每份又继续划分为W
份,迭代划分三次后得到的数据长度就是C*D
,把B,H,W
当作形状的话,就是B
张通道数为C*D
的H x W
图片。
写这个的原因还是为了理解对高维数组操作,比如对形状为[B,C,D,H,W]
的数据data
进行求和data.sum(1)
,在1
维进行求和,此时1
维就是我所说的数据维,0
维的长度为B
还是挺好理解的,就当作B
批就好了,再将2,3,4
维当作形状维,那么对于给定的形状[b,:,d,h,w]
,数据长度就是C
,形象一点的理解就是2,3,4
维组成D
张H x W
图片,图片的通道数为C
,先不考虑B
,则sum
就是对图片的通道数进行求和,这样‘物理意义’就比较明确了。
现在考虑在2
维度上进行求和,即data.sum(2)
,这个意义暂时没想到。。。。