【问题标题】:What would happen to training when validation_split is 0 while training a Keras model?训练 Keras 模型时,validation_split 为 0 时会发生什么情况?
【发布时间】:2019-12-19 05:18:00
【问题描述】:

我指的是来自Kerasfit 方法中的validation_split 参数:

validation_split:在 0 和 1 之间浮动。训练数据的分数 用作验证数据。该模型将区分这部分 的训练数据,不会对其进行训练,并将评估损失 以及每个 epoch 结束时有关此数据的任何模型指标。这 验证数据是从 x 和 y 数据中的最后一个样本中选择的 在洗牌之前提供。

我注意到默认值是 0 而不是传统的 0.2 或 0.33。我无法理解为什么他们选择使用 0 作为默认值,因为我认为没有验证集总是会导致训练过度拟合。我的假设错了吗?

【问题讨论】:

  • 你的假设没有错,但可以说找出这种情况下到底发生了什么的最好方法是亲自进行实验。
  • 没有验证集本身不会导致任何事情(过度拟合或其他);它只会限制 我们 看到我们的模型在看不见的数据上的实际性能。

标签: machine-learning keras


【解决方案1】:

验证集用于检测过拟合,没有验证集只是意味着您无法检测到过拟合。这并不意味着模型会自动过拟合。请记住,根本不会使用验证数据来训练模型,因此如果不使用验证数据,模型的行为就不可能有所不同。

也就是说,没有验证集的默认设置是有意义的,因为最终是一个人类通过查看学习曲线以及训练和验证损失之间的差异来检测过度拟合。这个过程(目前)不能自动化,因此必须由人工决定验证拆分的值,或者仅在 validation_data 参数中自行提供验证数据。

【讨论】:

    【解决方案2】:

    有时您想自己定义验证数据,并传递参数validation_data= (x_val, y_val)

    有时您需要 K 折交叉验证。

    有时您根本不想要验证数据。

    系统不能假设您的训练数据包含验证,这对用户来说不是一件好事。

    至于过拟合,取决于模型和数据。它不一定会总是过拟合。

    【讨论】:

      猜你喜欢
      • 2019-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      • 2022-01-12
      • 2021-05-14
      相关资源
      最近更新 更多