形状计算可以在运行网络之前回答实际设计问题:两个模块能否连接、激活值需要多少存储,以及卷积需要多少运算。先注明各轴,才能把八乘八乘三到四乘四乘六的变化分解为可计算的设计决定,而不是笼统地称作维度变化。
张量形状记录各个已命名轴的长度,但不能单独确定可训练参数量、计算成本或变换保留的信息。这些量需要分别定义与计算。
1. 轴、向量维数与矩阵秩
对于通道在最后一轴的图像,(H,W,C) 分别表示高、宽与通道数。批量形状为 (N,H,W,C);通道在前的约定则为 (N,C,H,W)。仅凭一串没有轴标签的数字,不能可靠判断各分量的含义。
数组库有时将轴的数量称为张量的 rank,但这不同于计量线性无关列数量的矩阵秩。向量维数则表示坐标数量。因此,“维度”的含义需要结合具体对象说明。
形状为 (8,8,3) 的图像包含 8⋅8⋅3=192 个标量。保持数值顺序时,展平可得到 R192 中的向量,而不丢弃元素。不过,元素数量本身并不是信息量的度量。
2. 卷积输出尺寸的推导
考虑长度为 H 的输入轴,两侧各填充 p,核长度为 k,膨胀率为 D,步幅为 s。要求 k,D,s 为正整数,p 为非负整数。核中首尾采样位置的跨度给出有效核尺寸:
keff=D(k−1)+1
在填充后的输入中,窗口起点为 0,s,2s,…,qs。最后一个窗口能够放下的条件为 qs+keff≤H+2p,因此有效起点数量为:
Hout=⌊sH+2p−D(k−1)−1⌋+1
宽度可采用相同推导。填充后的轴必须至少容纳一个窗口;非对称填充时,将 2p 替换为两侧填充量之和。当可用跨度不能被步幅整除时,不能省略向下取整。[1]
3. 激活值、参数与运算
取 H=W=8、Cin=3、Cout=6、k=3、p=1、s=2、D=1,则:
Hout=Wout=⌊7/2⌋+1=4
形状变化为 (8,8,3)→(4,4,6):高与宽减半,通道数翻倍。每个样本包含 192 个输入元素、96 个输出元素。计入每个输出通道的一个偏置,共享参数量为:
P=3⋅3⋅3⋅6+6=168
将每个输出位置、每个核系数对应的一次乘加计为一个 MAC,暂不计偏置加法,则:
MACs=4⋅4⋅6⋅3⋅3⋅3=2592
批量大小为 N 时,激活值数量与 MAC 数乘以 N,参数量仍为 168。运算统计需要注明口径,因为一次 MAC 也可能被计为两次浮点运算。

4. 分组与逐通道卷积
采用 g 组卷积时,输入与输出通道数均需被 g 整除。每个输出通道只访问 Cin/g 个输入通道,因此参数量为:
Pg=khkwgCinCout+Cout
当 g=Cin,且 Cout 为 Cin 的整数倍时,对应逐通道卷积。分组限制了通道连接关系,因此较低参数量并不保留普通稠密卷积中的全部交互。[1]
5. 感受野跨度
设 rl 为第 l 层的理论感受野跨度,jl 为相邻输出在原始输入坐标中的间隔。从 r0=j0=1 出发,有:
rl=rl−1+(kl−1)Dljl−1,jl=sljl−1
新增跨度包含 (kl−1)Dl 个间隔,每个间隔在原始输入中占 jl−1。对于两个核尺寸为三、膨胀率为一、步幅先二后一的层,得到 (r1,j1)=(3,2)、(r2,j2)=(7,2)。
跨度表示可能存在的输入依赖,并不意味着每个位置具有相同影响。边界处还需区分真实输入与填充坐标。因此,完整的形状分析应分别说明变化的轴、激活值与参数数量、运算量以及可能的空间依赖。[2]
参考文献