神经网络参数量的计算


   参数量是指模型的所有带参数的层的权重参数总量。视觉类网络组件中带参数的层主要有:卷积层、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

参考

  1. 如何计算卷积层中对应参数个数?
  2. 神经网络参数量的计算:以UNet为例
  • 15
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Transformer模型数量取决于模型的大小和深度。一个常见的Transformer模型通常包含两个主要部分:Encoder和Decoder。在Encoder中,数量主要来自Self-Attention层和Feed-Forward层;在Decoder中,数量主要来自Self-Attention层、Encoder-Decoder Attention层和Feed-Forward层。 具体来说,Transformer模型数量可以通过以下公式计算: ``` 数量 = (输入维度 * 隐藏维度 + 隐藏维度 * 隐藏维度 * 多头注意力头数) * 编码器层数 + (隐藏维度 * 隐藏维度 * 多头注意力头数 + 隐层维度 * 输出维度) * 编码器层数 + (输出维度 * 隐层维度 + 隐层维度 * 隐层维度 * 多头注意力头数) * 解码器层数 + (隐层维度 * 隐层维度 * 多头注意力头数 + 隐层维度 * 输入维度) * 解码器层数 ``` 其中,输入维度是输入语言的词嵌入维度,隐藏维度是Transformer模型的隐藏层维度,多头注意力头数是指每个注意力机制中的注意力头数,编码器层数和解码器层数指的是Transformer模型中编码器和解码器的层数。 需要注意的是,上述公式中并没有考虑位置编码(Positional Encoding)的数量。位置编码的数量取决于输入序列的长度,一般来说是与序列长度成正比的。 综上所述,Transformer模型数量随着模型的大小、深度和输入序列长度的增加而增加。请注意,这只是一个大致估计,实际的数量可能还会受到其他因素的影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值