【问题标题】:Dropout & batch normalization - does the ordering of layers matter?辍学和批量标准化 - 层的顺序重要吗?
【发布时间】:2020-02-03 23:38:39
【问题描述】:
我正在构建一个神经网络模型,我的问题是,dropout 和批量归一化层的顺序是否真的会影响模型?
如果我使用 ROC-AUC 分数作为我的衡量指标,那么将 dropout 层放在批标准化层之前(反之亦然)实际上会对模型的输出产生任何影响。
我希望输出具有较大的 (ROC-AUC) 分数,并且想知道它是否会受到层排序的任何影响。
【问题讨论】:
标签:
python-3.x
machine-learning
deep-learning
batch-normalization
dropout
【解决方案1】:
层的顺序会影响模型的收敛性,从而影响结果。基于 Batch Normalizationpaper,作者建议 Batch Normalization 应该在激活函数之前实现。因为 Dropout 是在计算激活后应用的。那么正确的层顺序是:
在使用 keras 的代码中,这是按顺序编写的:
model = Sequential()
model.add(Dense(n_neurons, input_shape=your_input_shape, use_bias=False)) # it is important to disable bias when using Batch Normalization
model.add(BatchNormalization())
model.add(Activation('relu')) # for example
model.add(Dropout(rate=0.25))
批量标准化有助于在训练模型时避免梯度消失/爆炸。因此,如果您有很多层,这一点特别重要。您可以阅读提供的论文以了解更多详细信息。