【问题标题】:Keras stops learning at one pointKeras 在某一时刻停止学习
【发布时间】:2019-03-27 11:13:13
【问题描述】:

每个班级大约有300张真实图片。具有 3 个类别的分类模型。 我使用 2000 个生成的样本和 10 个时期制作了一个模型。该模型还可以,但有许多假阴性预测。 比我想改进模型并将生成的样本数(真实图像数不变)增加到 20000。在第 6 个 epoch,准确率开始下降,最终达到 0.2

339/666 [==============>...............] - ETA: 52s - loss: 0.2762 - acc: 0.9012
340/666 [==============>...............] - ETA: 52s - loss: 0.2757 - acc: 0.9014
341/666 [==============>...............] - ETA: 52s - loss: 0.2754 - acc: 0.9015
342/666 [==============>...............] - ETA: 52s - loss: nan - acc: 0.9014   
343/666 [==============>...............] - ETA: 52s - loss: nan - acc: 0.8995
344/666 [==============>...............] - ETA: 52s - loss: nan - acc: 0.8976
345/666 [==============>...............] - ETA: 51s - loss: nan - acc: 0.8955

是否过拟合? 我可以在不重新开始学习的情况下以某种方式实时阻止它吗?例如。是否有可能在每个时期后保存模型,并在这种情况下采用最佳模型。 或者至少,Keras 可以打破教学吗?

【问题讨论】:

  • 没有过拟合。我认为可以使用from keras.callbacks import ModelCheckpoint 选择最佳迭代。
  • @AkshayNevrekar 回调,特别是 ModelCheckpoint 是我正在寻找的。看起来我可以很好地控制学习过程。在线课程中没有提到它,我曾经知道Keras。非常感谢。 P.S.:如果你把它写成答案,我会接受。

标签: python keras deep-learning


【解决方案1】:

您的模型在这里肯定不会过拟合。 在特定次数的迭代后,您的模型停止学习(准确度曲线变得更平坦)。

要克服这个问题,您可以执行以下操作

  • 添加更多数据
  • 调整超参数

keras 库通过回调 API 提供检查点功能。 ModelCheckpoint 回调类允许您定义在何处检查模型权重、文件应如何命名以及在什么情况下创建模型检查点。

使用它,您可以从迭代次数中选择最佳模型。

from keras.callbacks import ModelCheckpoint

"""
    Your Code
"""
checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')

参考How to Check-Point Deep Learning Models in Keras

【讨论】:

    【解决方案2】:

    我也遇到过类似的问题,你的损失突然变成nan 有点可疑。

    由于您的目标函数未更新,即不是数字,它可能会停止学习。

    我建议:

    • 查看模型损失函数
    • 审查特征化过程
    • 确保输入不会导致nan 发生

    最后一点可能最相关,因为非常大的数字可能会导致损失计算问题或nan 潜入您的特征向量。

    使用callback 来查看进程,例如ModelCheckpoint 等可以帮助调试。

    【讨论】:

    • 好点,谢谢!首先必须阅读它。检查 nan 的输入是一个很好的提示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    相关资源
    最近更新 更多