【问题标题】:MLP in keras : overfitting or underfitting?keras 中的 MLP:过拟合还是欠拟合?
【发布时间】:2018-05-21 17:55:50
【问题描述】:

我正在使用keras 来解决回归问题。预测值必须为正并且可以大于 1,因此我使用 ReLu 作为输出层的激活函数。在训练时,我得到了一个奇怪的MSE 情节: MSE plot (the validation mse is less than the training mse)

看不懂意思,是过拟合还是欠拟合,怎么处理?

【问题讨论】:

  • 我不太确定问题出在哪里 - 该图显示您的错误在第一个训练时期减少了,这不是您想要的吗?
  • 我从未见过这样的情节,训练情节高于验证情节是否正常?

标签: python machine-learning keras deep-learning


【解决方案1】:

不要对输出层使用 ReLu 函数。一旦输入小于零,使用 ReLu 函数的单元就会失效。因此,它以后不会改变。如果您正在处理回归问题,只需使用简单的线性函数作为您的激活函数。

【讨论】:

  • 但是在这种情况下,我可以得到负值。
  • 你认为我可以用“softplus”代替吗?
  • 是的,您可能会得到负值。但是神经网络会训练自己以尽可能接近训练输出。所以,它会找到自己的方式来寻找答案。一个softplus函数也可以帮助解决这个问题。如果我是你,我会给他们两个都试一试。
  • 实际上我测试了线性函数并且在测试时得到了负值,这就是我用relu替换它的原因。我正在使用“softplus”,我正在等待结果。谢谢。
  • 我认为你的模型在这种情况下是欠拟合的,因为神经网络会找到它的方式。您可能需要更多数据。但是使用 ReLu 函数进行输出可能是个坏主意。
【解决方案2】:

首先,你需要知道过拟合在训练集上是一个低损失函数,但在测试集上是一个高损失函数。其次,您需要知道 MSE 是您使用的损失函数还是回归任务的评估指标。我想你可能已经为这里的评估指标画了一条曲线。您实际上应该查看损失函数的曲线。最后,关于激活函数的选择,楼上说的很对。最好使用线性激活函数。

【讨论】:

  • 是的,我使用 MSE 作为损失函数。
  • 是的。在这种情况下,发生了欠拟合。
【解决方案3】:

我建议您查看验证集的预测值,以及那里的 y 标签分布。

您可能会预测一个常数值,但由于验证集中存在偏差,该常数值实际上会产生较低的 MSE。

再一次,这些都是关于你如何最终得到这样一个情节的假设。

【讨论】:

  • 其实我看过他们。我不是在预测一个常数值,但是这些值彼此非常接近(我预测的是一个非常小的值)这可能是问题吗?如果是,如何处理?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
  • 2019-07-03
  • 2013-12-19
相关资源
最近更新 更多