【问题标题】:Validation accuracy not improving after reaching 90%验证准确率达到 90% 后没有提高
【发布时间】:2019-10-18 18:00:54
【问题描述】:

我有大约 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 优化器的学习率(initial 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% 左右。有什么方法可以提高验证的准确性吗?

【问题讨论】:

  • 你的损失图是什么样的?验证数据集和训练数据集是否形成相同的分布?它们的尺寸是多少?模型是否过拟合?
  • 是的,它们来自同一个发行版。尺寸已经提到过。我不认为模型过度拟合。在达到 90% Val acc 后,val loss 似乎是恒定的,并且在一些 epoch 之后,val loss 略有增加并波动。
  • 你有损失图吗
  • val 损失在达到 90% Val acc 后似乎是恒定的,并且在一些 epoch 之后,val 损失略有增加并波动。
  • 一旦您的验证损失开始增加并偏离训练损失,您就已经开始过度拟合。

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


【解决方案1】:

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

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

利用数据提高绩效:

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

使用算法提高性能

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

通过算法调整提高性能

一些关于调整神经网络算法以充分利用它们的想法。

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

通过合奏提高性能

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

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

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

【讨论】:

    猜你喜欢
    • 2020-07-15
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 2020-12-29
    • 2020-09-01
    相关资源
    最近更新 更多