在 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的主要内容,如果未能解决你的问题,请参考以下文章