可以将 dropout 应用于卷积层或仅应用于密集层。如果是这样,它应该在池后使用还是池前和应用激活后使用?
另外我想知道批量归一化是否可以用于卷积层。
我在这里看过,但由于缺乏参考,我找不到有价值的答案。
可以将 dropout 应用于卷积层或仅应用于密集层。如果是这样,它应该在池后使用还是池前和应用激活后使用?
另外我想知道批量归一化是否可以用于卷积层。
我在这里看过,但由于缺乏参考,我找不到有价值的答案。
简而言之,是的。
Does it help?,建议使用 BN 层,因为它通常显示出改进,但您将获得的改进量更多地取决于问题。Dropout在 conv 块之间使用它,我的模型变得更好。最好在池化层之后应用 dropout。到目前为止,这部分还没有回答:“应该在pooling之后使用还是在pooling之前和应用激活之后使用?”
一个团队做了一些有趣的实验,发现至少对于残差网络,批量规范和激活应该在权重层之前(所以它是 BN --> ReLU --> 权重)。他们发现汇集位置可能会有所不同而不会造成损害。如果您尝试非常仔细地复制那篇论文,请注意关于剩余堆栈开头和结尾的异常放置段落。
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版本。