BatchNormalization层关联参数数量为2048的原因是什么?

33

我有以下代码。

x = keras.layers.Input(batch_shape = (None, 4096))
hidden = keras.layers.Dense(512, activation = 'relu')(x)
hidden = keras.layers.BatchNormalization()(hidden)
hidden = keras.layers.Dropout(0.5)(hidden)
predictions = keras.layers.Dense(80, activation = 'sigmoid')(hidden)
mlp_model = keras.models.Model(input = [x], output = [predictions])
mlp_model.summary()

这是模型摘要:

____________________________________________________________________________________________________
Layer (type)                     Output Shape          Param #     Connected to                     
====================================================================================================
input_3 (InputLayer)             (None, 4096)          0                                            
____________________________________________________________________________________________________
dense_1 (Dense)                  (None, 512)           2097664     input_3[0][0]                    
____________________________________________________________________________________________________
batchnormalization_1 (BatchNorma (None, 512)           2048        dense_1[0][0]                    
____________________________________________________________________________________________________
dropout_1 (Dropout)              (None, 512)           0           batchnormalization_1[0][0]       
____________________________________________________________________________________________________
dense_2 (Dense)                  (None, 80)            41040       dropout_1[0][0]                  
====================================================================================================
Total params: 2,140,752
Trainable params: 2,139,728
Non-trainable params: 1,024
____________________________________________________________________________________________________

BatchNormalization(BN)层的输入大小为512。 根据Keras文档,BN层的输出形状与输入形状相同,即512。

那么,与BN层相关联的参数数量为什么是2048?

2个回答

52

这2048个参数实际上是 [伽马权重, beta 权重, 移动平均值(不可训练), 移动方差(不可训练)],每个参数都有512个元素(与输入层的大小相同)。


34

Keras中的批量归一化实现了这篇论文

正如您在那里所读到的,为了使批量归一化在训练期间起作用,他们需要跟踪每个归一化维度的分布。为此,由于默认情况下您处于mode=0模式,他们在前一层上计算每个特征的4个参数。这些参数确保您正确地传播和反向传播信息。

因此,4*512 = 2048,这应该回答了您的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接