我正在构建一个神经网络模型,我的问题是,dropout 和批量归一化层的顺序是否真的会影响模型?如果我使用 ROC-AUC 分数作为我的测量指标,那么将 dropout 层放在批量标准化层之前(反之亦然)实际上会对模型的输出产生任何影响。
我希望输出具有较大的(ROC-AUC)分数,并且想知道它是否会受到层排序的任何影响。
我正在构建一个神经网络模型,我的问题是,dropout 和批量归一化层的顺序是否真的会影响模型?如果我使用 ROC-AUC 分数作为我的测量指标,那么将 dropout 层放在批量标准化层之前(反之亦然)实际上会对模型的输出产生任何影响。
我希望输出具有较大的(ROC-AUC)分数,并且想知道它是否会受到层排序的任何影响。
层的顺序会影响模型的收敛性,从而影响结果。基于 Batch Normalization论文,作者建议 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))
批量标准化有助于在训练模型时避免梯度消失/爆炸。因此,如果你有很多层,这一点特别重要。您可以阅读提供的论文以了解更多详细信息。