【发布时间】:2020-04-25 08:03:06
【问题描述】:
对于 CNN 架构,我想使用 SpatialDropout2D 层而不是 Dropout 层。 另外我想使用 BatchNormalization。 到目前为止,我总是在卷积层之后但在激活函数之前直接设置 BatchNormalization,正如 Ioffe 和 Szegedy 的论文中提到的那样。 我一直在 MaxPooling2D 层之后设置的 dropout 层。
在https://machinelearningmastery.com/how-to-reduce-overfitting-with-dropout-regularization-in-keras/SpatialDropout2D是在卷积层之后直接设置的。
我发现我现在应该按什么顺序应用这些图层相当令人困惑。我还在 Keras 页面上读到 SpatialDropout 应该直接放在 ConvLayer 后面(但我再也找不到这个页面了)。
以下顺序正确吗?
ConvLayer - SpatialDropout - BatchNormalization - 激活函数 - MaxPooling
我真的希望得到提示,并提前谢谢你
更新 我的目标实际上是在以下 CNN 架构 dropout 中交换空间 dropout:
model = Sequential()
model.add(Conv2D(32,(3,3))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(32,(3,3))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2))
model.add(Dropout(0.2))
model.add(Conv2D(64, (3,3))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(64,(3,3))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(512))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.4))
model.add(Dense(10))
model.add(Activation('softmax'))
【问题讨论】:
标签: keras batch-normalization activation-function dropout