达到90%后验证准确性仍未提高

时间:2019-10-18 18:00:54

标签: python deep-learning conv-neural-network tf.keras

我大约有14,000张图像用于面部检测二进制分类任务。大约有12,000张图像用于训练,有2200张图像用于验证。我的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%左右。有什么方法可以提高验证准确性吗?

1 个答案:

答案 0 :(得分:1)

有四种方法可以改善深度学习性能:

  1. 通过数据提高性能。
  2. 通过算法提高性能。
  3. 通过算法调整提高性能。
  4. 通过合奏改善演奏。

通过数据提高性能:

获取更多数据。 发明更多数据。 重新缩放您的数据。 转换您的数据。 功能选择

通过算法提高性能

抽查算法:也许您选择的算法并非最适合您的问题。 重采样方法:您必须知道模型的质量。您对模型性能的估计可靠吗?

通过算法调整提高性能

关于调整神经网络算法以从中受益的一些想法。

诊断。 重量初始化。 学习率。 激活功能。 网络拓扑结构。 批次和时代。 正则化。 优化和损失。 尽早停止。

通过合奏改善演奏

您可能要考虑的三个总体乐团领域:

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

检查以下链接以获取更多信息:https://machinelearningmastery.com/improve-deep-learning-performance/