【问题标题】:Underfitting Problem in Binary Classification using Multi-Layer Perceptron使用多层感知器的二元分类中的欠拟合问题
【发布时间】:2020-06-19 12:36:10
【问题描述】:

我目前正在使用多层感知器 (MLP) 开发一种有监督的异常检测,目标是在良性流量和恶意流量之间进行分类。我用的是CTU-13 dataset,数据集的样本如下: Sample of Dataset。该数据集有 169032 个良性流量和 143828 个恶意流量。我的 MLP 模型的代码如下:

def MLP_model():
model = Sequential()
model.add(Dense(1024,input_dim=15, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(256,activation='relu'))
model.add(Dense(256,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(128,activation='relu'))
model.add(Dense(128,activation='relu'))
model.add(Dense(1, activation='sigmoid'))

adam = optimizers.Adam(lr=0.0001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)

model.compile(optimizer = adam, loss='binary_crossentropy', metrics=['accuracy'])
return model    

model = MLP_model()

#With Callbacks
callbacks = [EarlyStopping('val_loss', patience=5)]
hist = model.fit(Xtrain, Ytrain, epochs=50, batch_size=50, validation_split=0.20, callbacks=callbacks, verbose=1)

我得到的结果如下:

Accuracy: 0.923045
Precision: 0.999158
Recall: 0.833308
F1 score: 0.908728

但是,从训练曲线来看,我怀疑模型拟合不足(基于this article): The Model's Training Curve

我尝试增加神经元和层数(建议here),但同样的问题仍然存在。感谢您为解决此问题提供的任何帮助。

【问题讨论】:

  • 你能分享详细信息吗?您的问题似乎更加过拟合,因为您的验证损失远高于火车损失。所以我实际上会将神经元的数量减少 4 倍。另外,你是否在 0 和 1 之间缩放你的输入?

标签: python tensorflow keras neural-network mlp


【解决方案1】:

首先,我很确定您的模型实际上是过拟合,而不是欠拟合。仅绘制训练损失,您应该会看到损失接近 0。但是正如您在图中看到的那样,与训练损失相比,验证损失仍然很高。发生这种情况是因为与训练数据集中的数据点数量相比,您的模型参数太多。

我建议将密集层大小减少到两位数/低三位数。

【讨论】:

  • 您好,我已尝试将密集层大小减小到 16-64 之间,但验证损失仍然很高,是的,我同意您的看法,这是过拟合。我也尝试过使用早期回调,但是召回值仍然低于 90%。
【解决方案2】:

尝试将 dropout 降低到 0.1 到 0.3 的范围内,它应该有助于这条看起来不稳定的曲线。另外,训练更多的 epoch,看起来平滑的曲线通常是当你训练更多的 epoch 时。

【讨论】:

  • 你好,我尝试将dropout降低到0.1-0.3,但是曲线是相似的,当我增加epoch时,validation loss会增加(是的,是过拟合)。
猜你喜欢
  • 2019-04-13
  • 2017-01-06
  • 2011-11-15
  • 2013-12-11
  • 2021-12-25
  • 1970-01-01
  • 2015-11-21
  • 2016-08-23
  • 2021-07-31
相关资源
最近更新 更多