首页 > 解决方案 > 验证准确率达到 90% 后没有提高

问题描述

我有大约 14,000 张图像用于人脸检测二进制分类任务。大约 12,000 张图像用于训练,2,200 张用于验证。我的CNN架构如下-

regularizer = tf.keras.regularizers.l2(l=0.001)
init = tf.initializers.he_uniform()
model = tf.keras.models.Sequential([

    tf.keras.layers.Conv2D(filters = 32, kernel_size = (3, 3), strides = (1, 1), padding='same', activation='relu', kernel_initializer=init, kernel_regularizer=regularizer, input_shape=(ht, wd, 3)),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.MaxPooling2D(pool_size=(2, 2), strides=(2, 2)),

    tf.keras.layers.Conv2D(64, (5, 5), (1, 1), padding='same', activation='relu', kernel_initializer=init, kernel_regularizer=regularizer),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.MaxPooling2D((2, 2), (2, 2)),

    tf.keras.layers.Conv2D(64, (3, 3), (1, 1), padding='same', activation='relu', kernel_initializer=init, kernel_regularizer=regularizer),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.MaxPooling2D((2, 2), (2, 2)),

    tf.keras.layers.Conv2D(128, (3, 3), (1, 1), padding='same', activation='relu', kernel_initializer=init, kernel_regularizer=regularizer),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.MaxPooling2D((2, 2), (2, 2)),

    tf.keras.layers.Conv2D(128, (3, 3), (1, 1), padding='same', activation='relu', kernel_initializer=init, kernel_regularizer=regularizer),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.MaxPooling2D((2, 2), (2, 2)),

    tf.keras.layers.Flatten(),

    tf.keras.layers.Dense(256, activation = 'relu', kernel_regularizer= regularizer),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.Dropout(0.25),
    tf.keras.layers.Dense(1, activation = 'sigmoid')
])

我的输入图像尺寸为 150*180*3。CNN 有大约 900k - 1M 个参数。我正在使用 16/32 的批量大小。另外,我的 Adam 优化器的学习率(初始 lr=0.001)调度器是这样的

reduce_lr_2 = tf.keras.callbacks.ReduceLROnPlateau(monitor='val_loss', 
                                             factor=0.2, 
                                             patience=2, 
                                             verbose=0, 
                                             mode='auto',
                                             min_delta=0.0001, 
                                             cooldown=1,
                                             min_lr=0)

我应用了多种类型的数据增强。我达到的训练准确率约为 95-96%,我达到的验证准确率约为 90%。我试过改变很多超参数,但验证准确率仍然停留在 90% 左右。有什么方法可以提高验证的准确性吗?

标签: pythondeep-learningconv-neural-networktf.keras

解决方案


有 4 种方法可以提高深度学习性能:

  1. 利用数据提高性能。
  2. 使用算法提高性能。
  3. 通过算法调整提高性能。
  4. 通过合奏提高性能。

使用数据提高性能:

获取更多数据。发明更多数据。重新调整您的数据。转换您的数据。特征选择

使用算法提高性能

抽查算法:也许您选择的算法不是最适合您的问题。 重采样方法:你必须知道你的模型有多好。您对模型性能的估计是否可靠?

通过算法调整提高性能

一些关于调整神经网络算法以便从中获得更多收益的想法。

诊断。权重初始化。学习率。激活函数。网络拓扑结构。批次和时期。正则化。优化和损失。早停。

通过合奏提高性能

您可能需要考虑的三个一般合奏领域:

组合模型。合并视图。堆叠。

查看以下链接了解更多信息:https ://machinelearningmastery.com/improve-deep-learning-performance/


推荐阅读