验证损失远高于训练损失

数据挖掘 Python 神经网络 喀拉斯
2021-09-30 12:09:32

我正在用一些文本数据训练 CNN。句子被填充和嵌入并馈送到 CNN。模型架构为:

model = Sequential()
model.add(Embedding(max_features, embedding_dims, input_length=maxlen))
model.add(Conv1D(128, 5, activation='relu'))
model.add(GlobalMaxPooling1D())

model.add(Dense(50, activation = 'relu'))
model.add(BatchNormalization())

model.add(Dense(50, activation = 'relu'))
model.add(BatchNormalization())

model.add(Dense(25, activation = 'relu'))
#model.add(Dropout(0.2))
model.add(BatchNormalization())

model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])

在此处输入图像描述

任何帮助,将不胜感激。

3个回答

您的模型完全过拟合。训练损失不断减少,但验证损失却没有。这意味着您当前的模型足够复杂,可以“记住”训练数据中的模式。在这种情况下,您需要规范化您的模型。

要规范您的数据,您可以尝试以下任何或所有组合:

1)减少神经网络的层数。

2)减少网络每一层的神经元数量以减少参数数量。

3) 添加 dropout 并调整其速率。

4) 对参数权重使用 L2 归一化并调整 lambda 值。

5) 如果可能,添加更多数据进行训练。

6) 添加更多数据可能并不总是经济可行的选择,因此“数据增强”可以在这里发挥重要作用。数据增强取决于神经网络的输入类型。对于图像,它们包括旋转、平移、仿射变换(如剪切等)。

您对训练数据集过度拟合,无法泛化到验证数据集。

减少过拟合的一种方法是正则化正则化神经网络的最常用方法是:

  1. 添加更多数据。
  2. 添加辍学
  3. 减少层数。

除了提到的之外,还有一些被证明有价值的事情是批量标准化和更少的深层。复杂性越低,您可以拥有的泛化能力就越强。