验证损失没有减少

数据挖掘 机器学习 神经网络 回归 lstm rnn
2021-10-04 22:44:28

我正在尝试训练 LSTM 模型。这个模型是否存在过度拟合?

这是训练和验证损失图:

损失

4个回答

模型从 epoch 10 开始就过度拟合,验证损失在增加,而训练损失在减少。

处理这样的模型:

  1. 数据预处理:标准化和规范化数据。
  2. 模型复杂度:检查模型是否过于复杂。添加 dropout,减少层数或每层中的神经元数。
  3. Learning Rate 和 Decay Rate:降低学习率,一个好的起始值通常在 0.0005 到 0.001 之间。还要考虑 1e-6 的衰减率。

还有许多其他选项可以减少过拟合,假设您使用的是 Keras,请访问此链接

是的,这是一个过度拟合问题,因为您的曲线显示了拐点。这是时代数量非常多的标志。在这种情况下,模型可以在拐点处停止,或者可以增加训练示例的数量。

此外,过度拟合也是由深度模型对训练数据造成的。在这种情况下,您会很早就观察到 val 和 train 之间的损失差异。

过度拟合的另一个可能原因是不正确的数据扩充。如果您正在扩充,请确保它确实按照您的预期进行。

我有一个类似的问题,结果是由于我的 Tensorflow 数据管道中的一个错误,我在缓存之前进行了扩充:

def get_dataset(inputfile, batchsize):
    # Load the data into a TensorFlow dataset.
    signals, labels = read_data_from_file(inputfile)
    dataset = tf.data.Dataset.from_tensor_slices((signals, labels))

    # Augment the data by dynamically tweaking each training sample on the fly.
    dataset = dataset.map(
                map_func=(lambda signals, labels: (tuple(tf.py_function(func=augment, inp=[signals], Tout=[tf.float32])), labels)))

    # Oops! Should have called cache() before augmenting
    dataset = dataset.cache()
    dataset = ... # Shuffle, repeat, batch, etc.
    return dataset
        
training_data = get_dataset("training.txt", 32)
val_data = //...

model.fit(training_data, validation_data=val_data, ...)

结果,仅在第一个 epoch 增加了训练数据,但在每个 epoch 都增加了验证数据。这导致模型在训练数据上快速过拟合,而验证损失不断增加。在 cache() 之后移动增强调用解决了这个问题。

我遇到了这个问题——虽然训练损失在减少,但验证损失并没有减少。我在使用 LSTM 时检查并发现:

  • 我简化了模型——我选择了 8 层而不是 20 层。
  • (-1,1)我选择不是在范围内缩放,而是(0,1)将我的验证损失减少了一个数量级
  • 我将批量大小从 500 减少到 50(只是反复试验)
  • 我添加了更多功能,我直观地认为这会为 X->y 对添加一些新的智能信息