验证损失没有减少
数据挖掘
机器学习
神经网络
回归
lstm
rnn
2021-10-04 22:44:28
4个回答
该模型从 epoch 10 开始就过度拟合,验证损失在增加,而训练损失在减少。
处理这样的模型:
- 数据预处理:标准化和规范化数据。
- 模型复杂度:检查模型是否过于复杂。添加 dropout,减少层数或每层中的神经元数。
- 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 对添加一些新的智能信息