参数量是指模型的所有带参数的层的权重参数总量。视觉类网络组件中带参数的层主要有:卷积层、BN 层、全连接层等。(注意:激活函数层(relu等)和 Maxpooling 层、Upsample 层是没有参数的,不需要学习,他们只是提供了一种非线性的变换)
1. 理论公式
- 卷积层: K 2 × C i × C o + C o \rm K^{2} \times C_i \times C_o + C_o K2×Ci×Co+Co(输入通道为卷积核通道数,输出通道为卷积核个数)
其中, K \rm K K 为卷积核大小, C i \rm C_i Ci 为输入通道数, C o \rm C_o Co 为输出通道数(也是 filter 的数量),最后一项为偏置项的参数量 。
- BN 层: 2 × C ^ i \rm 2 \times \hat{C}_i 2×C^i
BN 层有两个需要学习的参数,平移因子和缩放因子。 C ^ i \rm \hat{C}_i C^i 为输入通道数,即前一个卷积层的输出层通道数。
- 全连接层: T i × T o + T o \rm T_i \times T_o + T_o Ti×To+To
其中, T i \rm T_i Ti 为输入向量长度, T o \rm T_o To 为输出向量长度,最后一项为偏置项的参数量 。
2. CNN 参数数量
网络模型:
model = Sequential()
model.add(Conv2D(16,(2,2),input_shape=(224,224,3)))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dense(133))
model.summary()
网络参数:

详解:
- 卷积层参数量(第一层)
- 一个卷积核的参数:2 × 2 × 3 = 12;(in_channels=3,kernel_size=2)
- 16 个卷积核的参数:16 ×12 = 192;(out_channels=16)
- 加上偏置:192 + 16 = 208;(weights × x + bias)
- 池化层参数量(第二层)
- 池化层并没有参数;
- 全连接层参数量(第三层)
- 16 * 133 + 133 = 2261;(in_channels=16,out_channels=133,bias)
3. UNet 参数数量

UNet 结构如上图所示,把 UNet 共分为5个Stage,分别计算每个 stage 的参数量。(注意:相比于 UNe t原文和上图,我们把 UNet 的 channel 数缩小了一半,大多数论文也的确是这么做的)
- Stage 1(4 个 3×3 卷积,1 个 1×1 卷积): [ 3 2 × ( 1 × 32 + 32 × 32 + 64 × 32 + 32 × 32 ) + 32 × 4 ] + [ 1 2 × 32 × 2 + 2 ] = 37346 [3^2 \times (1 \times 32 + 32 \times 32 + 64 \times 32 + 32 \times 32) + 32 \times 4] + [1^2 \times 32 \times 2 + 2] = 37346 [32×(1×32+32×32+64×32+32×32)+32×4]+[12×32×2+2]=37346
- Stage 2(4 个 3×3 卷积): 3 2 × ( 32 × 64 + 64 × 64 + 128 × 64 + 64 × 64 ) + 64 × 4 = 166144 3^2 \times (32 \times 64 + 64 \times 64 + 128 \times 64 + 64 \times 64) + 64 \times 4 = 166144 32×(32×64+64×64+128×64+64×64)+64×4=166144
- Stage 3(4 个 3×3 卷积): 3 2 × ( 64 × 128 + 128 × 128 + 256 × 128 + 128 × 128 ) + 128 × 4 = 664064 3^2 \times (64 \times 128 + 128 \times 128 + 256 \times 128 + 128 \times 128) + 128 \times 4 = 664064 32×(64×128+128×128+256×128+128×128)+128×4=664064
- Stage 4(4 个 3×3 卷积): 3 2 × ( 128 × 256 + 256 × 256 + 512 × 256 + 256 × 256 ) + 256 × 4 = 2655232 3^2 \times (128 \times 256 + 256 \times 256 + 512 \times 256+ 256 \times 256) + 256 \times 4 = 2655232 32×(128×256+256×256+512×256+256×256)+256×4=2655232
- Stage 5(2 个 3×3 卷积): 3 2 × ( 256 × 512 + 512 × 512 ) + 512 × 2 = 3539968 3^2 \times (256 \times 512+ 512 \times 512) + 512 \times 2 = 3539968 32×(256×512+512×512)+512×2=3539968
- TransposeConv(4 个 3×3 的 up-conv): 2 2 × ( 512 × 256 + 256 × 128 + 128 × 64 + 64 × 32 ) + ( 256 + 128 + 64 + 32 ) = 696800 2^2 \times (512 \times 256 + 256 \times 128 + 128 \times 64 + 64 \times 32) + (256 + 128 + 64 + 32) = 696800 22×(512×256+256×128+128×64+64×32)+(256+128+64+32)=696800
- BN 层参数量(4 个 3×3 的 up-conv): 2 × ( 32 × 4 + 64 × 4 + 128 × 4 + 256 × 4 + 512 × 2 ) = 5888 2 \times (32 \times 4 + 64 \times 4 + 128 \times 4 + 256 \times 4 + 512 \times 2) = 5888 2×(32×4+64×4+128×4+256×4+512×2)=5888
由以上计算可得,没有加 BN 的 UNet 参数总量为 7759554,加入 BN 的 UNet 参数量为 7765442。对计算结果进行验证,有 BN:

没有 BN:

【参考】