多种条件提前停止

2023-12-29

我正在为推荐系统(项目推荐)进行多类分类,并且我目前正在使用sparse_categorical_crossentropy损失。因此,合理执行EarlyStopping通过监控我的验证损失,val_loss像这样:

tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=10)

其按预期工作。然而,网络(推荐系统)的性能是通过 Average-Precision-at-10 来衡量的,并在训练期间作为指标进行跟踪,如下所示average_precision_at_k10。因此,我还可以使用此指标执行提前停止:

tf.keras.callbacks.EarlyStopping(monitor='average_precision_at_k10', patience=10)

这也按预期工作。

我的问题:有时,验证损失会增加,而 10 时的平均精度会提高,反之亦然。因此,我需要监控both,并执行提前停止,当且仅当两者都在恶化。我想做的事:

tf.keras.callbacks.EarlyStopping(monitor=['val_loss', 'average_precision_at_k10'], patience=10)

这显然不起作用。有什么想法可以做到这一点吗?


在指导下Gerry P https://stackoverflow.com/a/64559644/11764097上面我设法创建了自己的自定义 EarlyStopping 回调,并认为我将其发布在这里,以防其他人想要实现类似的东西。

If both the 验证损失 and the 平均精度为 10没有改善patienceepoch 的数量,会提前停止。

class CustomEarlyStopping(keras.callbacks.Callback):
    def __init__(self, patience=0):
        super(CustomEarlyStopping, self).__init__()
        self.patience = patience
        self.best_weights = None
        
    def on_train_begin(self, logs=None):
        # The number of epoch it has waited when loss is no longer minimum.
        self.wait = 0
        # The epoch the training stops at.
        self.stopped_epoch = 0
        # Initialize the best as infinity.
        self.best_v_loss = np.Inf
        self.best_map10 = 0

    def on_epoch_end(self, epoch, logs=None): 
        v_loss=logs.get('val_loss')
        map10=logs.get('val_average_precision_at_k10')

        # If BOTH the validation loss AND map10 does not improve for 'patience' epochs, stop training early.
        if np.less(v_loss, self.best_v_loss) and np.greater(map10, self.best_map10):
            self.best_v_loss = v_loss
            self.best_map10 = map10
            self.wait = 0
            # Record the best weights if current results is better (less).
            self.best_weights = self.model.get_weights()
        else:
            self.wait += 1
            if self.wait >= self.patience:
                self.stopped_epoch = epoch
                self.model.stop_training = True
                print("Restoring model weights from the end of the best epoch.")
                self.model.set_weights(self.best_weights)
                
    def on_train_end(self, logs=None):
        if self.stopped_epoch > 0:
            print("Epoch %05d: early stopping" % (self.stopped_epoch + 1))

然后将其用作:

model.fit(
    x_train,
    y_train,
    batch_size=64,
    steps_per_epoch=5,
    epochs=30,
    verbose=0,
    callbacks=[CustomEarlyStopping(patience=10)],
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多种条件提前停止 的相关文章

  • 在 Python 中延迟转置列表

    所以 我有一个延迟生成的可迭代的三元组 我试图弄清楚如何将其转换为 3 个可迭代对象 分别由元组的第一个 第二个和第三个元素组成 然而 我希望这件事能懒惰地完成 所以 举例来说 我希望 1 2 3 4 5 6 7 8 9 将变成 1 4 7
  • 创建 xyz 海拔数据的曲面图

    我正在尝试用 python 创建一座山的表面图 其中我有一些 xyz 数据 最终结果应该类似于that https i stack imgur com rKQV0 png 该文件的格式如下 616000 0 90500 0 3096 712
  • 我可以在 matplotlib 中的绘图左侧放置一个垂直颜色条吗?

    来自颜色条方法的 matplotlib 命令摘要 http matplotlib org api pyplot api html highlight colorbar matplotlib pyplot colorbar我知道关键字参数or
  • 如何在Python + Selenium中获取元素的值

    我在我的 Python 3 6 3 代码中得到了这个 HTML 元素 作为 Selenium网页元素当然 span class ocenaCzastkowa masterTooltip style color 000000 alt 5 sp
  • DataFrame.loc 的“索引器太多”

    我读了关于切片器的文档 http pandas pydata org pandas docs stable advanced html using slicers一百万次 但我从来没有理解过它 所以我仍在试图弄清楚如何使用loc切片Data
  • pandas 数据框的最大大小

    我正在尝试使用读取一个有点大的数据集pandas read csv or read stata功能 但我不断遇到Memory Errors 数据帧的最大大小是多少 我的理解是 只要数据适合内存 数据帧就应该没问题 这对我来说不应该是问题 还
  • lmfit模型拟合然后预测

    我正在领养lmfit进行曲线拟合并使用拟合模型进行预测 然而下面的代码并没有达到我想要的效果 能否请你帮忙 谢谢 import numpy as np from lmfit import Model def linearModel x a0
  • matplotlib vlines 图中未应用 y 轴的最小值

    我正在 matplotlib 中绘制 vlines 图 数据集中的所有 y 值如下 gt 0 我希望 y 轴最底部的刻度能够读取0 但相反 我得到 500 这是代码 usr bin env python import numpy as np
  • ImproperlyConfigured at / 不允许空静态前缀 - Django

    我正在使用 Django 上传 显示图像 该网站部署在 Heroku 上 下列的this https coderwall com p bz0sng教程我能够成功上传图像 但是 图像并未显示在模板中 然后我了解到我的 urls py 末尾应该
  • Pygame:有人可以帮我实现双跳吗?

    我知道已经有其他关于此问题的帖子了 但我的运动系统与我发现的有点不同 所以随后我问这个问题 我的运动系统基于一个名为的命名元组Move up left right down 然后就是这个 def update self move block
  • 机器学习的周期性数据(例如度角 -> 179 与 -179 相差 2)

    我使用 Python 进行核密度估计 并使用高斯混合模型对多维数据样本的可能性进行排名 每一条数据都是一个角度 我不确定如何处理机器学习的角度数据的周期性 首先 我通过添加 360 来删除所有负角 因此所有负角都变成了正角 179 变成了
  • 列表中的特定范围(python)

    我有一个从文本字符串中提取的整数列表 因此当我打印该列表 我称之为test I get 135 2256 1984 3985 1991 1023 1999 我想打印或制作一个仅包含特定范围内的数字的新列表 例如1000 2000之间 我尝试
  • 在Python中随机交错2个数组

    假设我有两个数组 a 1 2 3 4 b 5 6 7 8 9 我想将这两个数组交错为变量 c 注意 a 和 b 不一定具有相同的长度 但我不希望它们以确定性的方式交错 简而言之 仅仅压缩这两个数组是不够的 我不想要 c 1 5 2 6 3
  • 为什么当循环数变大时,设置的打印值会被排序?

    它是python 3 8 当输入10时 打印是随机的 但是当输入900时 打印的顺序与 print sorted s 相同 import random s set for i in range int input loop nums n v
  • python 中的 F 字符串前缀给出语法错误[重复]

    这个问题在这里已经有答案了 我有一个名为 method 的变量 它的值是 POST 但是当我尝试运行时print f method method is used 它不断在最后一个双引号处给出语法错误 我找不到它这样做的原因 我正在使用 py
  • 如何使用 python 模块的多个 git 分支?

    我想使用 git 来同时处理我正在编写的模块中的多个功能 我目前正在使用 SVN 只有一个工作区 因此我的 PYTHONPATH 上只有该工作区 我意识到这不太理想 所以我想知道是否有人可以建议一种更 正确 的方法来做到这一点 让我用一个假
  • 为数据集生成随机 JSON 结构排列

    我想生成 JSON 结构的许多不同排列作为同一数据集的表示 最好不需要对实现进行硬编码 例如 给定以下 JSON name smith occupation agent enemy humanity nemesis neo 应该产生许多不同
  • 如何创建简单的梯度下降算法

    我正在研究简单的机器学习算法 从简单的梯度下降开始 但在尝试用 python 实现它时遇到了一些麻烦 这是我试图重现的示例 我获得了有关房屋的数据 居住面积 以英尺为单位 和卧室数量 以及最终的价格 居住面积 英尺2 2104 卧室 3 价
  • 如何仅读取 CSV 文件每行的第一列 [重复]

    这个问题在这里已经有答案了 如何在Python中读取CSV文件每行的第一列 我的数据是这样的 1 abc 2 bcd 3 cde 我只需要循环第一列的值 另外 当我在 calc 中打开 csv 文件时 每行中的数据都在同一个单元格中 这正常
  • 在Python中使用os.makedirs创建目录时出现权限问题

    我只是想处理上传的文件并将其写入工作目录中 该目录的名称是系统时间戳 问题是我想以完全权限创建该目录 777 但我不能 使用以下代码创建的目录755权限 def handle uploaded file upfile cTimeStamp

随机推荐

  • 如何检查元素是否没有特定的类?

    如何查看是否有班级 例如 我知道如何检查它是否具有 test 类 但是如何检查它是否不具有 test 类 if this hasClass test if this hasClass test
  • 为什么eclipse编译shell javac或mvn的文件会产生错误:代码太大?

    环境 日食月神 行家3 2 3 java 7 我见过问题 https stackoverflow com questions 2407912 code too large compilation error in java像这样 但我不明白
  • 有没有一种简单的方法可以修剪 NetworkX 图中断开连接的网络?

    我正在使用 Python 的 NetworkX 包来计算不同大小网络的一堆网络统计信息 我正在扫描一个独立的参数 系统地修剪边缘 因此有时小型网络会与主网络断开连接 有没有一种简单的方法可以检测并删除 NetworkX 中那些较小的断开连接
  • Pyspark Dataframe:获取满足条件的上一行

    对于 PySpark DataFrame 中的每一行 我尝试从满足特定条件的前一行获取一个值 也就是说 如果我的数据框看起来像这样 X Flag 1 1 2 0 3 0 4 0 5 1 6 0 7 0 8 0 9 1 10 0 我想要的输出
  • 找不到 JDBC 驱动程序

    try String userName root String password
  • 带 setter 的 mapState

    我想通过分配setter方法mapState 我目前使用一种解决方法 命名我感兴趣的变量 todo 作为临时名称 storetodo 然后在另一个计算变量中引用它todo methods mapMutations clearTodo upd
  • EBNF 转义字符

    我正在尝试为基于 python 的伪语言制作字符串的语法表达式 我想知道如何执行以下操作 字符串以 或 开头或结尾 它可以包含除 n 之外的任何字符 仅当另一个反斜杠开头时才能包含这些字符 例如 Mark said Boo n 公认 我只能
  • 使用 Rails 3 和远程设计 => true

    我在使用 AJAX 登录设备时遇到问题 我正在使用 remote gt true选项和 javascript 帮助程序的 jQuery 版本 https github com rails jquery ujs 当用户输入正确的信息时 会话视
  • 不使用 IFrame 的原因?

    有什么原因吗not到底要使用 iframe 吗 我目前使用它从不同的服务器加载页面 注册页面 分布式应用程序的一部分 以提供无缝体验 使用 iframe 被认为是不好的做法还是可以使用 iframe 是一个很棒的工具 它享有近乎通用的浏览器
  • 如何在 pandas 中用滚动平均值填充 nan 值

    我有一个数据框 其中几个地方包含 nan 值 我正在尝试执行数据清理 其中我用前五个实例的平均值填充 nan 值 为此 我提出了以下建议 input data frame var list fillna input data frame v
  • 如何使用 Xamarin.UITest 在 iOS 上访问照片所需的权限对话框中点击“确定”按钮?

    我正在使用 Xamarin UITest 在 iOS 应用程序上执行自动化 问题是 在访问图库上传照片时 出现一个权限对话框 我需要点击 确定 按钮将其关闭 我尝试过以下方法 但没有成功 使用树命令不会显示该对话框的层次结构 因此我 无法找
  • 抛出 BufferError 的示例

    在阅读 Python 3 3 文档时 我注意到有关 BufferError 异常的条目 当无法执行与缓冲区相关的操作时引发 现在我想知道在什么情况下代码可能会抛出此错误 以确定它是由于编程错误还是更像是某种系统错误 有人有这个例外的例子吗
  • 结构错误找不到记录器“paramiko.transport”的处理程序

    我不确定为什么会收到此错误并终止我的连接 我通过 easy install 从 1 7 5 更新了 paramiko 1 7 6 我正在尝试设置 Fabric 以将 Django 应用程序上传到我的服务器 当我尝试备份现有应用程序目录时 似
  • 将 DOM 元素创建到集合的项目中

    尝试从模板创建 DOM 元素 gota 首先我创建模板 function htmlToElement html var template document createElement template template innerHTML
  • 前端控制器与外观模式

    好的 我在网上做了一些搜索 发现this http www coderanch com t 100644 OO Patterns UML Refactoring Difference between Facade Front Control
  • 子树将主树合并到分支中: -s recursive -Xsubtree=?

    In the git book https git scm com book en v2 Git Tools Advanced Merging 子树合并 部分 它说 您也可以做相反的事情 进行更改rackmaster 分支的子目录 然后将它
  • 从浏览器缓存中删除单个文件

    我的页面中有一张图像 该图像缓存在浏览器中 现在我已经删除了图像 但是因为它已被缓存 所以请求不会发送到服务器 并且它会再次出现 那么如何从浏览器缓存中删除它呢 不 您无法物理删除缓存文件 相反 您可以动态生成文件的链接 例如 并最终用不同
  • 如何在 Windows 8 / 2012 中左对齐窗口标题?

    有没有办法 本质上 在 Windows 8 或 2012 计算机中左对齐窗口标题 Window 8 或 2012 中的窗口标题水平居中对齐 我们有一个移植到 Windows 8 2012 计算机的 WPF 应用程序 我们正在与几个客户一起测
  • 为什么我在 ~/.m2 下找不到我的 settings.xml?

    为什么我找不到我的设置 xml under m2 注意 我当前正在运行 Apache Maven3 3 9在我的机器上 settings xml 文件可能存在于两个位置 Maven 安装 maven home conf settings x
  • 多种条件提前停止

    我正在为推荐系统 项目推荐 进行多类分类 并且我目前正在使用sparse categorical crossentropy损失 因此 合理执行EarlyStopping通过监控我的验证损失 val loss像这样 tf keras call