在 Keras 的卷积层上使用 Dropout

Posted

技术标签:

【中文标题】在 Keras 的卷积层上使用 Dropout【英文标题】:Using Dropout on Convolutional Layers in Keras 【发布时间】:2019-08-09 09:51:18 【问题描述】:

我已经实现了一个对一维输入信号进行批量归一化的卷积神经网络。我的模型的准确率非常好,约为 80%。这是我层的顺序:(Conv1D、Batch、ReLU、MaxPooling)重复6次,Conv1D、Batch、ReLU、Dense、Softmax。

我看过几篇文章说我不应该在卷积层上使用 dropout,而是应该使用批量归一化,所以我想通过用 dropout 层替换所有批量归一化层来试验我的模型,看看 dropout 是否真的会让我的表现更糟。

我的新模型结构如下:(Conv1D, Dropout, ReLU, MaxPooling) repeat 6 times, Conv1D, Dropout, ReLU, Dense, Softmax。我尝试了 0.1、0.2、0.3、0.4、0.5 的辍学率。我的新模型的性能只有 ~25%,比我原来的模型差很多,甚至比预测主导类 (~40%) 还要差。

我想知道性能上的巨大差异是否实际上是用 dropout 代替批量标准化的结果。还是我对如何使用 dropout 的误解。

【问题讨论】:

【参考方案1】:

要直观了解如何使用批处理规范和 dropout,您应该首先了解这些层的作用:

批量归一化使用在批次上计算的均值和方差来缩放和移动层输出,以便下一层的输入对内部协变量偏移更加稳健 Dropout 随机丢弃其输入的元素,教导后续层不要依赖特定的特征或元素,而是使用所有可用信息。这可以强制网络更好地泛化,并且是减少过度拟合的一种手段

您所做的是将标准化层替换为向信息流添加额外噪声的层,这当然会导致准确性急剧下降。

我对您的建议是像在您的第一个设置中一样使用批量规范,如果您想试验 dropout,请在将激活函数应用于前一层之后添加它。通常,dropout 用于规范非常容易过拟合的密集层。试试这个:

    6 x(Conv1D、Batch、ReLU、MaxPooling) 1 x(Conv1D、Batch、ReLU) Dropout、Dense、Softmax

【讨论】:

以上是关于在 Keras 的卷积层上使用 Dropout的主要内容,如果未能解决你的问题,请参考以下文章

keras中卷积的两种padding方式

是否可以使用 Keras 在卷积神经网络的最后一层特征上训练 SVM 或随机森林?

如何在keras中可视化卷积神经网络中间层的输出?

使用keras,手动搭建卷积模型

Keras深度学习实战——卷积神经网络的局限性

Keras深度学习实战——卷积神经网络详解与实现