首页 > 解决方案 > 如何防止此模型中的过度拟合?

问题描述

我为图像分类问题制作了这个模型。我遇到的问题是验证准确率总是比训练准确率低 5-8%,而验证损失远高于训练损失。这是我的一个时代的一个例子:损失:0.2232 - acc:0.9245 - val_loss:0.4131 - val_acc:0.8700

model = Sequential()

model.add(Conv2D(32, 3, 3, border_mode='same', input_shape=(150, 
150, 3), activation='relu'))
model.add(Conv2D(32, 3, 3, border_mode='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, 3, 3, border_mode='same', activation='relu'))
model.add(Conv2D(64, 3, 3, border_mode='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(128, 3, 3, border_mode='same', 
activation='relu'))
model.add(Conv2D(128, 3, 3, border_mode='same', 
activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(256, 3, 3, border_mode='same', 
activation='relu'))
model.add(Conv2D(256, 3, 3, border_mode='same', 
activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))

model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))

model.add(Dense(1))
model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy',
              optimizer=RMSprop(lr=0.0001),
              metrics=['accuracy'])

# this is the augmentation configuration we will use for training
train_datagen = ImageDataGenerator(
    rescale=1. / 255,
    shear_range=0.1,
    zoom_range=0.1,
    horizontal_flip=True)

# this is the augmentation configuration we will use for testing:
# only rescaling
test_datagen = ImageDataGenerator(rescale=1. / 255)

我已经尝试使用 Hyperas 进行贝叶斯超参数优化,但它推荐的模型超参数对我来说并不真正有效。我应该在我的模型中进行哪些更改以防止它过度拟合?我没有使用太多数据来训练和验证模型,因为我没有太多数据来说明模型在现实生活中的用途。任何建议将不胜感激。

标签: pythontensorflowkerasdeep-learningconv-neural-network

解决方案


过度拟合是一回事,训练与验证错误是另一回事。

您的训练分数比您的验证更好这一事实并不意味着您过度拟合。当你的验证分数达到最佳时,你就过度拟合了,然后在训练中开始变得更糟。

如果您正在寻找更好的验证分数 - 更好的模型泛化,您可以做的是:

  • 增加 dropout(你的 dropout 看起来足够好,但尝试增加它,看看会发生什么,

  • 使用更多数据进行训练(正如您上面所说的那样不可能)

  • 尝试更重的增强

  • 尝试预训练网络

  • 尝试合奏

  • 尝试 tta(测试时间增加)

  • 尝试任何其他训练策略,如余弦退火、混合生成器或其他生成器(不是 keras)作为标注


推荐阅读