代码之家  ›  专栏  ›  技术社区  ›  from keras import michael

在Keras中使用交叉验证指标提前停止

  •  5
  • from keras import michael  · 技术社区  · 6 年前

    EarlyStopping(monitor = 'val_acc', patience = 5) ? 在允许训练进入下一个时期之前,是否可以对模型进行交叉验证,以获得更稳健的测试误差估计?我发现,早期停止度量,比如验证集的精度,可能会受到高方差的影响。早期停止的模型通常在看不见的数据上表现得不太好,我怀疑这是因为与验证集方法相关联的高方差。

    i 到新纪元 i + 1 . 我想买新纪元的模型 ,将训练数据分成10个部分,学习9个部分,估计剩余部分的误差,重复上述步骤,使10个部分都有机会成为验证集,然后继续训练到epoch 像往常一样有完整的训练数据。10个误差估计值的平均值将有望成为一个更稳健的指标,可用于提前停止。

    我曾试图编写一个自定义的度量函数,其中包括k-fold交叉验证,但我无法让它工作。有没有一种方法可以交叉验证被监控的早期停止度量,也许可以通过Keras模型内部的自定义函数或Keras模型外部的循环?

    谢谢!!

    2 回复  |  直到 6 年前
        1
  •  3
  •   Adil B Cleve Green    6 年前

    可以看出,Keras确实有一个非常可定制的回调功能 here .

    EarlyStopping 函数,它对我来说在训练期间检查验证丢失的工作,您可以创建一个自定义回调函数。还可以链接自定义回调函数。

    如果您的问题是访问回调中的模型,那么 self answer 早顶

    backend .

    我希望我能帮上忙。

        2
  •  0
  •   from keras import michael    6 年前

    我认为使用@VincentPakson建议的回调会更干净、更高效,但所需的编程级别超出了我的能力范围。我可以创建一个for循环来完成我想要的:

    1. 为单个历元训练模型并使用 model.save()

    2. 加载保存的模型,并为10次折叠中的每一次(即10个模型)训练单个历元的模型,然后平均10个验证集误差。

    3. 使用所有训练数据加载保存的模型和单个历元的训练,并用此模型覆盖保存的模型。

    4. 重复步骤1-3,直到2的估计值在给定的耐心下停止改善。

    我想要一个更好的答案,但这似乎奏效了。慢慢地。