深度学习测试损失曲线不会下降

数据挖掘 机器学习 神经网络 深度学习 美国有线电视新闻网 优化
2022-02-18 13:39:25

我一直在为我正在从事的这个当前项目处理深度学习项目,它基本上是一个时间序列分类问题。在给定一系列时间序列数据的情况下,我需要将客户分类为诚实或不诚实。

我现在拥有的当前模型仅使用 CNN,但我计划在未来使用 LSTM 或其他模型对其进行扩展。这是我的模型的代码。

model = Sequential([
    Input(batch_input_shape = (None, 1036, 1)),

    Conv1D(
        filters=32,
        kernel_size=3,
        padding='same',
        activation='relu',
        activity_regularizer=l2(5e-4),
    ),
    Conv1D(
        filters=16,
        kernel_size=3,
        padding='same',
        activation='relu',
        activity_regularizer=l2(5e-4),
    ),
    MaxPooling1D(),
    
    Conv1D(
        filters=8,
        kernel_size=3,
        padding='same',
        activation='relu',
        activity_regularizer=l2(5e-4),
    ),
    Conv1D(
        filters=8,
        kernel_size=3,
        padding='same',
        activation='relu',
        activity_regularizer=l2(5e-4),
    ),
    MaxPooling1D(),
    Flatten(),

    Dense(10, activation='relu'),
    Dropout(0.25),
    Dense(1, activation='sigmoid'),
])

model.compile(
    # optimizer=tf.keras.optimizers.Adam(learning_rate=1e-4),
    loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
    metrics=[f1_m,precision_m, recall_m, matthews_correlation, 'accuracy', fpr_m]
)

在训练模型 100 个 EPOCH 后,损失曲线是这样的 在此处输入图像描述

我已经尝试了很多东西,它们是:

  • 减少网络规模。这仍然会导致相同的问题,但在网络中的不同点
  • 降低优化器的学习率。与上面的点相同。这似乎有效,但实际上发生这种情况时它正在改变。

我愿意接受任何关于如何使测试曲线更符合训练曲线的意见或建议。我应该注意我的数据集是不平衡的,我只是平衡x_trainy_train使用 SMOTE,而不是平衡测试和验证数据集以保持数据尽可能干净。

1个回答

您的学习曲线表明过度拟合。

在这方面你应该尝试

  • 辍学率增加
  • 将 l1/l2 正则化调整到更高的水平
  • 检查训练和验证测试中的班级比例(“学习容易预测困难”的不平衡)

此外,您可能希望

  • 添加批处理规范层
  • 尝试不同的激活
  • 检查在训练迭代期间每层的扩展权重/偏差得到什么更新,以防梯度消失/爆炸