迁移学习时的批量归一化

Batch Normalization while Transfer Learning

我目前正在使用 MobilenetV2 架构进行迁移学习。在分类之前,我在顶部添加了几个 Dense 层。我应该在这些层之间添加 BatchNormalization 吗?

base_model = MobileNetV2(weights='imagenet', include_top=False, input_shape=(200,200,3))
x = base_model.output
x = GlobalAveragePooling2D(name="Class_pool")(x)
x = Dense(512, activation='relu')(x)
x = BatchNormalization()(x)
x = Dropout(.4)(x)
x = Dense(1024, activation='relu')(x)
x = BatchNormalization()(x)
x = Dropout(.4)(x)
x = Dense(512, activation='relu')(x)
x = BatchNormalization()(x)
x = Dropout(.4)(x)
x = Dense(512, activation='relu')(x)
x = BatchNormalization()(x)
X = Dense(20,activation='softmax')(x)

我之前在没有任何这些批量归一化层的情况下训练过这个网络,并且一直在努力获得良好的准确性。在尝试了多种学习率和冻结层的组合后,我只取得了半成功。我希望这会有所帮助 太多 BatchNormalization 层对网络不利吗?

批量归一化将有助于协方差偏移,并且当您对新数据进行批量训练时,这对网络来说是一件好事。没有太多的 BatchNormalization,只是放在每个有激活的层之后。