【问题标题】:Detecting overfitting or underfitting检测过拟合或欠拟合
【发布时间】:2020-12-16 03:52:46
【问题描述】:

我在TensorFlow中做模型,我检测到有过拟合,修改模型参数后,似乎不再有过拟合,但我不确定。我向你展示了我在 Tensorboard 训练后得到的两张图表。

epoch_loss:

epoch_accuracy:

更改 TensorFlow 一侧的 Smoothing 参数后,它会显示准确度图:

我有两个问题想问你。

  1. 什么是平滑参数?
  2. 您是否看到模型在训练期间的行为?

谢谢大家。

【问题讨论】:

  • 我想知道您如何看待模型,它与训练结果的好坏有关。

标签: python tensorflow


【解决方案1】:

smoothing 像移动平均线一样工作。如果你增加它的大小,它会在附近区域取更多的值,它会给出这个平滑的方面。为了更好地理解背后的数学原理,请查看question。

您的模型看起来几乎完美(略微欠拟合),我建议您继续训练大约 500-1000 个额外的 epoch。

【讨论】:

  • 感谢您的 cmets,我将模型训练到 3000 个 epoch,我看到大约在 2500 个验证数据的损失值超过了训练的值,所以我决定用 2400 个训练模型时代。
【解决方案2】:

平滑工作如其他答案中所述。您的模型似乎工作正常,并且正在继续减少训练和验证损失趋势。我可能会建议在您的模型中添加一些 BatchNormalization 层以获得更平滑的收敛。文档是here. 我还建议添加回调,如下所示

lra=tf.keras.callbacks.ReduceLROnPlateau(
    monitor="val_loss",
    factor=0.5,
    patience=1,
    verbose=1,
    mode="auto",
    min_delta=0.0001,
    cooldown=0,
    min_lr=0)

estop=tf.keras.callbacks.EarlyStopping(
    monitor="val_loss",
    min_delta=0,
    patience=4,
    verbose=1,
    mode="auto",
    baseline=None,
    restore_best_weights=True)
# in model.fit add
callbacks=[lra, estop]

【讨论】:

  • 感谢您的贡献,我有一个问题。我已经应用了你给我的两个回调,在训练模型时,配置了 2400 个 epoch,只完成了 30 个 epoch,会发生什么?如果是这样,这种配置不允许我很好地训练模型。
  • 可能被 Early stop 回调停止。如果在耐心参数 epochs 后验证损失没有减少,它将停止训练。这表明您的模型开始过度拟合。如果您想进一步训练,请增加耐性参数的值。
猜你喜欢
  • 2013-12-19
  • 1970-01-01
  • 2019-02-10
  • 1970-01-01
  • 2019-07-03
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
相关资源
最近更新 更多