首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Keras中使用交叉验证指标提前停止

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

Stack Overflow用户
提问于 2018-10-13 09:01:53
回答 2查看 886关注 0票数 6

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

为了最小化早期停止指标中的方差,我想在模型从epoch i训练到epoch i + 1时对早期停止指标进行k折叠交叉验证。我想在epoch i上使用模型,将训练数据分成10个部分,在9个部分上学习,估计其余部分的误差,重复,以便所有10个部分都有机会成为验证集,然后像往常一样使用完整的训练数据继续进行训练,以epoch i + 1。10个误差估计的平均值有望成为一个更健壮的度量,可以用于早期停止。

我曾尝试编写一个包含k-折交叉验证的自定义度量函数,但我无法使其正常工作。有没有办法交叉验证被监控的提前停止指标,可能是通过Keras模型内部的自定义函数或Keras模型外部的循环?

谢谢!!

EN

回答 2

Stack Overflow用户

发布于 2018-10-15 12:30:43

Keras确实有一个非常可定制的回调功能,可以在here上看到。

如果你对keras当前的EarlyStopping函数不满意,你可以创建一个自定义的回调函数。此外,还可以链接自定义回调函数。

如果您的问题是访问回调中的模型,则可以在此answer中看到self是您想要访问的变量。我不完全理解您为什么要在测试阶段“重新开发”模型。但是,您仍然可以使用回调,在EarlyStopping回调之后,您可以创建另一个回调函数来“重新开发”模型。

如果你想要访问模型的更深层次的变量,你可以使用Keras backend

我希望我能帮上忙。

票数 3
EN

Stack Overflow用户

发布于 2018-10-17 04:02:12

我想,使用@VincentPakson建议的回调会更干净、更高效,但所需的编程级别超出了我的能力范围。我可以通过以下方式创建一个for循环来执行我想要的操作:

使用model.save().

  • Loading保存的模型训练单个时期的模型并保存它,并为10个折叠(即10个模型)中的每个折叠训练模型的单个时期,然后使用所有训练数据对保存的模型和训练的单个时期平均10个验证集,并使用此model.

  • Repeating覆盖保存的模型步骤1-3,直到2的估计停止改善给定的耐心。

我很想得到一个更好的答案,但这似乎是可行的。慢慢地。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52788635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档