验证损失增加,验证准确性降低

数据挖掘 Python 深度学习 分类 喀拉斯 过拟合
2021-10-03 14:14:00

我的模型有问题。我正在尝试使用最基本的 Conv1D 模型来分析评论数据并输出 1-5 类的评级,因此损失是 categorical_crossentropy。模型结构如下

# define model
model = Sequential()
model.add(Embedding(vocab_size, 100, input_length=max_length))
model.add(Conv1D(filters=32, kernel_size=8, activation='relu'))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(10, activation='relu'))
model.add(Dense(5, activation='softmax'))

# compile network
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

# fit network
model.fit(final_X_train, final_Y_train, epochs=5, batch_size=50, validation_data=(final_X_val, final_Y_val), callbacks=callback)

总参数:14,977,717

可训练参数:14,977,717

不可训练参数:0

训练 212135 个样本,验证 69472 个样本

Epoch 1/5
loss: 0.9452 - acc: 0.5781 - val_loss: 0.8440 - val_acc: 0.6309

Epoch 2/5
loss: 0.7707 - acc: 0.6711 - val_loss: 0.8234 - val_acc: 0.6433

Epoch 3/5
loss: 0.5807 - acc: 0.7657 - val_loss: 0.9144 - val_acc: 0.6345

Epoch 4/5
loss: 0.3736 - acc: 0.8575 - val_loss: 1.1982 - val_acc: 0.6194

Epoch 5/5
loss: 0.2285 - acc: 0.9173 - val_loss: 1.5770 - val_acc: 0.6073

训练 acc 增加,损失按预期减少。但是验证损失和验证 acc 在第二个 epoch 之后直接减少。训练后的整体测试给出了大约 60 秒的准确度。

总精度为:0.6046845041714888

我已经清理、改组、下采样(所有类都有 42427 个数据样本)并将数据正确拆分为训练(70%)/验证(10%)/测试(20%)。

如果您发现有任何改进可以解决此问题,请告诉我。:)

1个回答

你所经历的被称为过度拟合,它是机器学习和数据科学中的一个常见问题。

当模型开始关注训练数据集中的噪声并基于它提取特征时,就会发生过度拟合。这有助于模型提高其在训练集上的性能,但会损害其泛化能力,因此验证集上的准确性会降低。

为了处理过拟合,你需要在训练过程中使用正则化。您可以尝试添加 dropout 层或批归一化层,添加权重正则化,或者您可以通过执行一些数据增强来人为地增加训练集的大小。

您可以在以下帖子中阅读有关它的更多信息:

在 CNN 上修复过度拟合的可能方法是什么?