手工计算深度学习模型中的参数数量

手工计算深度学习模型中的参数数量

计算深度学习模型的可训练参数的数量被认为太微不足道了,因为您的代码已经可以为您完成此操作。但是我想在这里留下笔记,让我们偶尔参考一下。以下是我们将要运行的神经网络模型:

  1. 前馈神经网络(FFNN)
  2. 循环神经网络(RNN)
  3. 卷积神经网络(CNN)

我们将使用Keras的API构建机器学习模型,以便于原型设计和干净的代码,因此我们可以在此处快速导入依赖库:

手工计算深度学习模型中的参数数量

构建之后model,调用model.count_params()以验证可训练的参数数量。

1. 前馈神经网络(FFNN)

  • i, 输入大小
  • h,隐藏层的大小
  • o,输出大小

对于一个隐藏层,

num_params

=各层之间的连接+每层中的偏差

= (i×h + h×o)+(h + o)

例1.1:输入大小为3,隐藏层大小为5,输出大小为2

手工计算深度学习模型中的参数数量

图1.1

  • i = 3
  • h = 5
  • o = 2

num_params

=各层之间的连接+每层中的偏差

= (3×5 + 5×2)+(5 + 2)

= 32

手工计算深度学习模型中的参数数量

例1.2:输入大小50,隐藏层大小[100,1,100],输出大小50

手工计算深度学习模型中的参数数量

图1.2

  • i = 50
  • h = 100,1,100
  • o = 50

num_params

=各层之间的连接+每层中的偏差

= (50×100 + 100×1 + 1×100 + 100×50)+(100 + 1 + 100 + 50)

= 10,451

手工计算深度学习模型中的参数数量

2. 循环神经网络(RNN)

  • g,门数量(RNN有1个,GRU有3个,LSTM有4个)
  • h,隐藏单元的大小
  • i,输入的大小

每个门的权重个数实际上是一个FFNN,具有输入大小(h+i)和输出大小h。所以每个门都有h(h + i)+ h个参数。

num_params = g ×[ h(h + i)+ h ]

例2.1:具有2个隐藏单元和输入大小为3的LSTM。

手工计算深度学习模型中的参数数量

图2.1:LSTM cell

  • g = 4(LSTM有4个门)
  • h = 2
  • i= 3

num_params

= g ×[ h(h + i)+ h ]

= 4 ×[2(2 + 3)+ 2]

= 48

手工计算深度学习模型中的参数数量

例2.2:具有5个隐藏单元和输入大小为8(其输出串联)+ LSTM(50个隐藏单元)的堆叠双向GRU

手工计算深度学习模型中的参数数量

图2.2:由BiGRU和LSTM层组成的堆叠RNN

双向GRU,5个隐藏单元,输入大小8

  • g = 3(GRU有3个门)
  • h = 5
  • i = 8

num_params_layer1

= 2 × g ×[ h(h + i)+ h ](由于是双向,第一项为2)

= 2 ×3×[5(5 + 8)+ 5]

= 420

LSTM有50个隐藏单位

  • g = 4(LSTM有4个门)
  • h = 50
  • i = 5 + 5(GRU的输出大小为5,与隐藏单元的数量相同)

num_params_layer2

= g ×[ h(h + i)+ h ]

= 4×[50(50 + 10)+ 50]

= 12,200

total_params = 420 + 12,200 = 12,620

手工计算深度学习模型中的参数数量

merge_mode 默认情况下是串联。

3.卷积神经网络(CNN)

对于一层,

  • i,输入映射(或通道)的数量
  • f,filter size
  • o,输出映射(或通道。这也是由使用了多少个filters定义的)的数量

一个filter应用于每个输入映射。

num_params

=权重+偏差

= [ i×(f×f)×o ] + o

例3.1:灰度图像,输出3个通道

手工计算深度学习模型中的参数数量

图3.1:使用2 ×2 filter对灰度图像进行卷积 输出3个通道

  • i = 1(灰度只有1个通道)
  • f = 2
  • o = 3

num_params

= [ i×(f×f)×o ] + o

= [1 ×(2 × 2)× 3] + 3

= 15

手工计算深度学习模型中的参数数量

例3.2:RGB图像,1通道的输出

每个输入特征映射都有一个过滤器。生成的卷积按元素顺序添加,并向每个元素添加一个偏差项。这将给出一个带有1个feature map的输出。

手工计算深度学习模型中的参数数量

图3.2:使用2 ×2 filter将RGB图像卷积,输出1通道

  • i = 3(RGB图像有3个通道)
  • f = 2
  • o = 1

num_params

= [ i×(f×f)×o ] + o

= [3 ×(2×2)×1] + 1 = 13

手工计算深度学习模型中的参数数量

例3.3:具有2个通道的图像,以及3个通道的输出

每个输入feature map有3个filters(紫色、黄色、青色)。生成的卷积按元素顺序添加,并向每个元素添加一个偏差项。这给出了一个带有3个特性映射的输出。

手工计算深度学习模型中的参数数量

图3.1:2通道图像,2 ×2 filter, 输出3个通道

这里有27个参数--24个权重和3个偏差。

  • i = 2
  • f = 2
  • o = 3

num_params

= [ i×(f×f)×o ] + o

= [2 ×(2×2)×3] + 3 = 27

手工计算深度学习模型中的参数数量

相关推荐