可以将 dropout 和批量归一化应用于卷积层吗

数据挖掘 机器学习 深度学习 美国有线电视新闻网
2021-09-16 08:50:08

可以将 dropout 应用于卷积层或仅应用于密集层。如果是这样,它应该在池后使用还是池前和应用激活后使用?
另外我想知道批量归一化是否可以用于卷积层。

我在这里看过,但由于缺乏参考,我找不到有价值的答案。

3个回答

简而言之,是的。

  • Batch Normalization Batch Normalization layer可以用在两个卷积层之间,或者两个dense层之间,甚至一个卷积层和一个dense层之间。重要的问题是Does it help?,建议使用 BN 层,因为它通常显示出改进,但您将获得的改进量更多地取决于问题。
  • Dropout:一般来说,卷积层不容易过拟合,但这并不意味着你不应该使用 dropout。你可以,但这又取决于问题。例如,我试图建立一个网络,我Dropout在 conv 块之间使用它,我的模型变得更好。最好在池化层之后应用 dropout。

到目前为止,这部分还没有回答:“应该在pooling之后使用还是在pooling之前和应用激活之后使用?”

一个团队做了一些有趣的实验,发现至少对于残差网络,批量规范和激活应该在权重层之前(所以它是 BN --> ReLU --> 权重)。他们发现汇集位置可能会有所不同而不会造成损害。如果您尝试非常仔细地复制那篇论文,请注意关于剩余堆栈开头和结尾的异常放置段落。

出版:他等人。- 2016 - 深度残差网络中的身份映射

Dropout 和 Batch Normalization 都可以与卷积层一起使用;但它建议使用 BN 而不是 Dropout(请参阅下面的链接)。

在 MaxPooling2D 之前,有几个教程在 Conv2D 和 Activation 之间应用 BatchNormalization

像这样:

model.add(Conv2D(64, 3, padding = "same"))
model.add(BatchNormalization())
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))

BN 可能不会加速收敛;但它确实(平均而言)提高了泛化能力(即测试准确性)。

看到这个这个

这是 TMI版本