← 返回题目列表

卷积层的输出尺寸和参数量怎么计算?

高频 中等 第 5 / 25 题 更新于 2026/08/02
卷积神经网络输出尺寸参数量stride

简化版

输出尺寸公式输出边长 = ⌊(输入边长 - 卷积核大小 + 2×填充) / 步长⌋ + 1,记作 O = (W - K + 2P)/S + 1。其中 K=核大小、P=padding 填充、S=stride 步长。padding(补零)用来控制输出尺寸(same 填充可保持尺寸不变),步长 S>1 会成倍缩小输出。参数量公式:一个卷积层的参数 = (卷积核宽 × 卷积核高 × 输入通道数 + 1) × 输出通道数,即 (K×K×C_in + 1) × C_out(+1 是每个输出通道的偏置)。关键:卷积参数量只和核大小、通道数有关,与输入图像的宽高无关(权值共享),这正是 CNN 参数少的原因。

详细版

输出尺寸计算:

O = ⌊(W - K + 2P) / S⌋ + 1
   W=输入边长, K=核大小, P=padding, S=stride

例:输入 32×32、核 5×5、padding 0、步长 1 → (32-5+0)/1+1 = 28 → 输出 28×28。

Padding 的作用:

padding效果
valid(P=0)不填充,输出比输入小
same填充使输出尺寸=输入(步长为1时)

参数量计算(一个卷积层):

参数量 = (K_h × K_w × C_in + 1) × C_out
         └── 每个卷积核的权重 ──┘ +1偏置  × 卷积核数量

例:输入通道 3、核 3×3、输出通道 64 → (3×3×3 + 1) × 64 = 1792 个参数。

关键: 参数量与输入宽高无关(权值共享),只和核大小、输入/输出通道数有关。

完整版教学

一、为什么要会算——设计和面试都要

搭建 CNN 时,要知道每层卷积后特征图变成多大(决定后续层怎么接、感受野多大)、参数量多少(决定模型大小和计算量)。这两个计算是 CNN 的基本功,面试也常直接考。核心是两个公式:输出尺寸公式参数量公式

二、输出尺寸公式

卷积核在输入上滑动,输出特征图的边长由输入尺寸、核大小、填充、步长共同决定:

O = ⌊ (W - K + 2P) / S ⌋ + 1
  • W:输入的边长(宽或高,方形图宽高一样)。
  • K:卷积核大小(如 3、5)。
  • P:padding(每边填充的像素数)。
  • S:stride(步长,卷积核每次滑动的格数)。
  • ⌊⌋ 是向下取整。

推导直觉:填充后有效输入边长是 W+2P;卷积核要放得下,最后一个位置在 W+2P-K 处;以步长 S 滑动,能放的位置数是 (W+2P-K)/S + 1

例子:输入 32×32,核 5×5,无填充(P=0),步长 1:

O = (32 - 5 + 0)/1 + 1 = 28  → 输出 28×28

再如输入 224×224,核 3×3,P=1,S=2:O = (224-3+2)/2 + 1 = 112 → 输出 112×112(步长 2 尺寸减半)。

三、Padding(填充)的作用

padding 是在输入边缘补零,用来控制输出尺寸、保护边缘信息:

  • valid(P=0,不填充):卷积后输出比输入小(每次卷积都缩边)。多层卷积会让特征图不断缩小。
  • same(合适的填充):填充到让输出尺寸 = 输入尺寸(步长为 1 时)。对 3×3 核,P=1 即可保持尺寸;5×5 核 P=2。

为什么需要 padding:

  1. 保持尺寸:不想让特征图每层都缩小时用 same 填充。
  2. 保护边缘信息:不填充时边缘像素被卷积核覆盖的次数少,信息利用不足;填充让边缘也能充分参与。

四、Stride(步长)的作用

stride(步长) 是卷积核每次滑动的距离:

  • S=1:逐格滑动,输出尺寸大(保留最多信息)。
  • S>1:跳格滑动,输出尺寸成倍缩小(S=2 大致减半),起到下采样作用——可以替代池化来降维(步长卷积,现代架构常用)。

步长越大,输出越小、计算越少,但损失的空间细节越多。

stride 表示卷积窗口相邻落点的间隔,大于 1 时会下采样输出空间尺寸并降低后续计算。它同时改变采样相位,若缺乏低通处理,细节可能混叠而不是简单地“压缩”。手算输出尺寸时 stride 位于分式分母,最终还要按框架的 floor、ceil 或 SAME 规则取整。

五、参数量公式(重点)

一个卷积层的参数量(要学习的权重数):

参数量 = (K_h × K_w × C_in + 1) × C_out
  • K_h × K_w:一个卷积核的空间大小(如 3×3=9)。
  • C_in:输入通道数(每个卷积核要覆盖所有输入通道,所以乘 C_in)。
  • +1:每个输出通道的偏置
  • C_out:卷积核的数量 = 输出通道数(每个核产出一张特征图/一个输出通道)。

例子:输入通道 3(RGB),核 3×3,输出通道 64:

参数量 = (3×3×3 + 1) × 64 = (27+1)×64 = 28×64 = 1792

六、关键洞察:参数量与输入宽高无关

注意参数量公式里没有输入图像的宽 W 和高 H!参数量只取决于核大小、输入通道数、输出通道数

这正是权值共享的体现(详见局部连接与权值共享专题):同一个卷积核在整张图滑动、共用一套权重,所以不管输入是 32×32 还是 1024×1024,一个卷积层的参数量都一样。

对比全连接层:全连接参数 = 输入维度 × 输出维度,直接和输入尺寸挂钩、动辄百万。卷积层参数和输入分辨率解耦——这就是 CNN 参数远少于全连接的根本原因

(注意:参数量和输入尺寸无关,但计算量(FLOPs) 和输入尺寸有关——输出特征图越大、卷积要算的位置越多。别把参数量和计算量搞混。)

七、把 dilation、非方形尺寸与 groups 一次算全

二维卷积应分别计算高和宽,膨胀后的有效核为 K_eff=d×(K-1)+1。设输入 31×28,核 3×5,dilation=2×1,padding=2×2,stride=2×1,则有效核为 5×5;输出高为 floor((31+4-5)/2)+1=16,输出宽为 floor((28+4-5)/1)+1=28

Hout = floor((Hin + 2Ph - Dh*(Kh-1) - 1)/Sh) + 1
Wout = floor((Win + 2Pw - Dw*(Kw-1) - 1)/Sw) + 1
params = Kh*Kw*(Cin/groups)*Cout + (bias ? Cout : 0)

C_in=16C_out=32groups=2,本例权重参数量为 3×5×8×32=3840,启用偏置则再加 32。参数量不随 H、W 增长,但输出位置数会影响 MACs;每个输出元素约需 K_h×K_w×C_in/groups 次乘加。

面试手算前先确认框架是否允许非对称 padding、是否计偏置,以及题目要 FLOPs、MACs 还是参数量。

八、常见误区与追问

  • 误区:SAME padding 在任何 stride 下都保持输入尺寸。 许多框架在 stride 大于 1 时输出为 ceil(input/stride)
  • 误区:卷积参数量需要乘输出高和宽。 那是计算量的一部分,参数由核、通道、groups 和偏置决定。
  • 追问:dilation 如何影响有效核? 有效核是 d×(K-1)+1,空洞增大覆盖范围但不增加核权重数。
  • 追问:分组卷积为什么要求通道可整除? 每组需要分到整数个输入和输出通道,框架通常要求两者可被 groups 整除。
  • 追问:为什么 Conv+BN 常关闭 bias? BN 的可学习平移通常使卷积偏置冗余,可省少量参数。

九、加强记忆

输出尺寸O = ⌊(W - K + 2P)/S⌋ + 1(W 输入边长、K 核大小、P 填充、S 步长);padding 控制尺寸(same 保持不变、valid 缩小)并保护边缘,stride>1 下采样成倍缩小(可替代池化)。参数量(K_h×K_w×C_in + 1) × C_out(一个核的权重 × 输入通道 + 偏置,再乘核数量/输出通道)——例:输入通道 3、核 3×3、输出 64 → (27+1)×64=1792关键洞察:卷积参数量与输入图像宽高无关(权值共享),只和核大小、输入/输出通道有关,这是 CNN 参数远少于全连接的根本;但计算量与输入尺寸有关,别和参数量混淆。