python - 如何防止此模型中的过度拟合?

标签 python tensorflow keras deep-learning conv-neural-network

我为图像分类问题制作了这个模型。我遇到的问题是验证准确度总是比训练准确度低 5-8%,而验证损失远高于训练损失。这是我的一个纪元的示例:loss: 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 进行贝叶斯超参数优化,但它推荐的模型超参数并不真正适合我。我应该在我的模型中更改什么以防止它过度拟合?我没有使用太多数据来训练和验证模型,因为我没有太多关于模型将在现实生活中使用的数据。任何建议将不胜感激。

最佳答案

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

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

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

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

  • 使用更多数据进行训练(不可能像你上面说的那样)

  • 尝试更重的增强

  • 尝试预训练网络

  • 尝试集成

  • try tta(测试时间增加)

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

关于python - 如何防止此模型中的过度拟合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57076930/

相关文章:

python - 如何在 NLTK 中使用西类牙语 Wordnet?

python - 检查目标 : expected dense_49 to have 4 dimensions, 时出错,但得到形状为 (2250, 3) 的数组

tensorflow - 在神经网络中使用卷积层

python - Tensorflow、平方根激活函数实现(整形误差)

python - 在Mac上加载模块-Python3

python - 在 TensorFlow 中定义成本/损失函数

python - 如何保存大型Python numpy数据集?

python - ValueError : Error when checking input: expected gru_5_input to have shape (None, None, 10) 但得到形状为 (1, 4, 1) 的数组

python - 在多列 pandas 上应用 "list"函数

python - tensorflow 中 RNN 的编码器解码器模型