与 BatchNormalization 层关联的参数数量是 2048?
Posted
技术标签:
【中文标题】与 BatchNormalization 层关联的参数数量是 2048?【英文标题】:How the number of parameters associated with BatchNormalization layer is 2048? 【发布时间】:2017-07-20 03:32:13 【问题描述】:我有以下代码。
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 documentation,BN 层的输出形状与输入相同,即 512。
那么BN层关联的参数个数怎么是2048呢?
【问题讨论】:
有理由否决这个问题吗? 【参考方案1】:Keras 中的批量标准化实现了this paper。
正如您所读到的那样,为了在训练期间进行批量标准化工作,他们需要跟踪每个标准化维度的分布。为此,由于默认情况下您位于mode=0
,因此它们会在前一层上为每个特征计算 4 个参数。这些参数确保您正确传播和反向传播信息。
所以4*512 = 2048
,这应该回答你的问题。
【讨论】:
【参考方案2】:这2048个参数其实是[gamma weights, beta weights, moving_mean(non-trainable), moving_variance(non-trainable)]
,每个有512个元素(输入层的大小)。
【讨论】:
感谢您解释这 2 个不可训练的参数!以上是关于与 BatchNormalization 层关联的参数数量是 2048?的主要内容,如果未能解决你的问题,请参考以下文章
SpatialDropout2D、BatchNormalization 和激活函数的正确顺序?
在推理时启用 dropout 并禁用 BatchNormalization