我已经用较小的数据集训练了以下CNN模型,因此确实过拟合:

model = Sequential()
model.add(Conv2D(32, kernel_size=(3,3), input_shape=(28,28,1), padding='same'))
model.add(BatchNormalization())
model.add(Activation('relu'))

model.add(Conv2D(32, kernel_size=(3,3), padding='same'))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.4))

model.add(Flatten())
model.add(Dense(512))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
model.compile(loss="categorical_crossentropy", optimizer=Adam(), metrics=['accuracy'])


该模型具有许多可训练的参数(超过300万,这就是为什么我想知道是否应该像下面这样使用其他MaxPooling来减少参数的数量?

转换-BN-执行-MaxPooling-转换-BN-执行-MaxPooling-退出-展平

或附加的MaxPooling和Dropout如下所示?


转换-BN-执行-MaxPooling-退出-转换-BN-执行-MaxPooling
-辍学-扁平化


我正在尝试了解MaxPooling的全部含义,以及它是否可以防止过度拟合。

最佳答案

当数据集的大小不足以容纳要素数量时,可能会发生过度拟合。
最大池化使用最大操作来池化要素集,从而使特征集数量减少。
因此,最大池应该从逻辑上减少过拟合。

遗漏可通过确保该功能并非始终可用来减少对任何单个功能的依赖,从而迫使模型寻找不同的潜在提示,而不是仅仅坚持一个,这很容易使模型过度适合任何显然良好的提示。
因此,这也应有助于减少过拟合。

08-24 21:06