设计卷积网络时,张量形状看似只是算术,却直接决定特征能否拼接、跳跃连接是否对齐、显存是否超预算。最可靠的方法不是背若干孤立公式,而是先统一符号,再按高度和宽度分别计算。设输入单轴长度为N,卷积核为K,步幅为S,两侧总填充由左右两项组成,膨胀率为D。膨胀后的有效核宽不是K乘D,而是D乘以K减一后再加一。
普通卷积先求有效核,再处理取整
K_eff = D × (K - 1) + 1;N_out = floor((N + P_left + P_right - K_eff) / S) + 1
二维卷积把同一公式分别用于高和宽。若没有填充、步幅为一、膨胀率为一,输出每个方向会缩短K减一个位置;加入填充后,卷积核允许覆盖输入边缘之外的虚拟值。公式中的向下取整非常重要:步幅无法整除剩余距离时,最后一个不完整窗口通常不会继续滑动。
| N | K | S | 总填充 | D | 输出 |
|---|---|---|---|---|---|
| 7 | 3 | 1 | 0 | 1 | 5 |
| 7 | 3 | 2 | 2 | 1 | 4 |
| 7 | 3 | 1 | 4 | 2 | 7 |

所谓same通常表达输出长度约为输入长度除以步幅后向上取整,而不是永远与输入完全相同。先计算目标输出为向上取整的N除以S,再反推所需总填充:目标减一乘步幅,加有效核,再减输入,若结果为负则取零。总填充为奇数时,两侧无法相等,框架会把多出的一个位置放在约定的一侧。跨框架迁移模型时,这个不对称规则必须核对。
池化层也遵守窗口移动逻辑
最大池化和平均池化的输出尺寸通常使用同一类公式,只是窗口内聚合方式不同,并且通常没有可训练权重。部分接口提供向上取整模式,边界行为会与普通卷积不同;平均池化还可能选择是否把填充值计入分母。出现一像素偏差时,不要只看K和S,还要检查取整模式、显式填充与数据布局。
- 先写出输入的N、通道数和批次维所在位置。
- 把膨胀率换成有效核宽,避免在公式中重复或遗漏。
- 分别计算高与宽,并保留每一步的整数除法结果。
- 用一个全一小矩阵运行框架层,核对边界与输出形状。
转置卷积是在形状映射上反向,不是求逆图像
转置卷积把普通卷积对应的线性映射做转置,常用于可学习上采样。它并不能恢复被普通卷积丢失的所有信息,因此称作反卷积容易产生误解。单轴输出可写为:输入减一乘步幅,减去两侧填充,加有效核,再加输出补偿项。输出补偿只用于在多个可能形状中选择一个,不是在特征之间实际补一圈像素。
N_out = (N - 1) × S - P_left - P_right + K_eff + output_padding
当步幅大于一时,多种输入长度可能经过普通卷积得到同一输出长度,转置映射因此存在形状歧义。指定目标尺寸或输出补偿可以消除这项歧义,但其合法范围受步幅和框架约束。跳跃连接若差一个像素,应该回到每一层的填充与取整记录排查,而不是在末尾随意裁剪到能拼接为止。

转置卷积产生棋盘格,不一定是公式错误。核大小与步幅造成的覆盖次数不均,会让不同输出位置累加不同数量的贡献;先插值再普通卷积是另一种可比较的上采样方案。
参数量只看核与通道,计算量还要乘输出位置
普通二维卷积若输入通道为C_in、输出通道为C_out、分组数为G,则每个输出通道连接C_in除以G个输入通道。权重数为K_h乘K_w乘C_in除以G再乘C_out;启用偏置时再加C_out。输出特征图的高宽不会改变参数量,却会成比例影响乘加次数和激活内存。
- 标准卷积的G为一,每个输出通道读取全部输入通道。
- 深度卷积常令G等于输入通道,每组只处理少量通道。
- 逐点卷积使用一乘一核,主要承担通道混合与升降维。
- 归一化层可能另有缩放、偏置和运行统计,不能算进卷积核。
- 共享权重意味着同一核在所有空间位置复用。
例如三乘三卷积从32通道映射到64通道、无分组并带偏置,参数数目为三乘三乘32乘64再加64。若改成32组,前提是通道数满足整除关系,参数会显著下降,但通道之间的连接结构也改变,不能只把它视为免费压缩。
用感受野账本追踪输入覆盖范围
感受野描述某层一个位置理论上可以依赖输入的多大区域。逐层维护两个量:跳距j表示相邻特征中心在原输入上相隔多少,感受野r表示一个位置覆盖的理论宽度。初始j与r都为一;经过一层后,新感受野等于旧感受野加有效核减一乘旧跳距,新跳距等于旧跳距乘步幅。
r_new = r_old + (K_eff - 1) × j_old;j_new = j_old × S

感受野尺寸相同,不代表采样中心一定对齐。非对称填充会移动起始中心,分支网络若只核对高宽,仍可能把语义位置错开。严谨的形状账本可以再记录首个特征中心相对输入边缘的位置。理论感受野也不等于模型实际使用的证据范围,后者受权重、激活和训练数据影响。
把每一层写成可审计的形状合同
建议为网络保留一张逐层表:输入形状、核、步幅、膨胀、两侧填充、分组、输出形状、参数量、跳距与感受野。手算后用框架打印实际张量形状,并对包含奇数尺寸、不同批次和最小合法输入的样本做测试。遇到拼接失败时,从第一个不一致的层向上追,不要只修改报错位置。
最终需要同时核对四本账:尺寸账保证张量可连接,参数账估算模型容量,计算与激活账约束速度和显存,感受野账解释信息覆盖。把步幅、填充、膨胀和分组统一放进这些账本,卷积网络的结构变化就能被推导和验证,而不再依赖试运行后的猜测。
本文《CNN尺寸推导别靠猜:卷积、转置卷积、参数量与感受野核算》由 xkmchenmu 发布于 xkmchenmu Blog。 转载请保留原文链接并注明出处。
支付宝扫一扫