如何最好地处理 Neuraxle 管道中的错误和/或丢失数据?

Posted

技术标签:

【中文标题】如何最好地处理 Neuraxle 管道中的错误和/或丢失数据?【英文标题】:How best to handle errors and or missing data in a Neuraxle pipeline? 【发布时间】:2021-05-03 12:47:21 【问题描述】:

假设您有一个管道,其中的步骤可能会因某些输入元素而失败,例如: FetchSomeImagesFromIds -> 调整大小 -> DoSomethingElse

在这种情况下,第一步会下载 100 张图片中的 10 张...并将其传递给调整大小..

我正在寻找有关如何在管道级别报告或处理这些缺失数据的建议,例如: Pipeline.errors() -> PluginX:成功:10,失败:90,总数:100,错误:键:错误

我当前的实现从 current_keys 中删除了丢失的键,以便保留键 -> 数据映射,如果有任何丢失,则实际上退出整个程序。鉴于 https://github.com/Neuraxio/Neuraxle/issues/418 的先前问题

想法?

【问题讨论】:

【参考方案1】:

我认为在您的管道中使用服务将是一个好方法。如果我考虑一下,我会这样做,尽管可能存在更多解决方案:

    创建您的管道和管道步骤。 创建一个上下文并向上下文中添加一个自定义内存库服务,您可以在其中跟踪哪些数据处理正确或不正确。根据您的需求和更广泛的背景,它可以是正面数据库,也可以是负面数据库,您可以分别在其中添加处理后的示例或从集合中减去它们。 调整在第 1 点创建的管道及其步骤,以便它可以在 handle_transform_data_container 方法中使用上下文中的服务。您甚至可以有一个 WhileTrue() 步骤,该步骤将永远循环,直到 BreakIf() 步骤将评估所有内容都已处理,例如,如果您希望您的管道工作直到所有内容都已处理,并获取没有的批次BreakIf 步骤及其 lambda 之外的结束条件。 lambda 确实会调用服务以了解数据处理的位置。 在整个处理结束时,无论您过早中断(没有任何 while 循环)还是仅在最后中断,您仍然可以访问上下文以及其中存储的内容。

更多信息:

要查看有关如何一起使用服务和上下文以及在步骤中使用它的示例,请参阅此答案:https://***.com/a/64850395/2476920 另请注意,BreakIf 和 While 步骤是 Neuraxle 中尚未开发的核心步骤。我们最近与 Vincent Antaki 有一个绝妙的想法,其中 Neuraxle 是一种语言,因此管道中的步骤就像基本的语言关键字(While、Break、Continue、ForEach)等​​等。这种抽象很强大,因为它可以将数据流控制为逻辑执行流。

这是我目前最好的解决方案,而且还从来没有做过。可能还有更多其他方法可以通过创造力来做到这一点。甚至可以考虑在管道中执行 TryCatch 步骤以捕获一些错误并管理数据执行流中发生的情况。

所有这些都将在 Neuraxle 中完成,但尚未完成。我们正在寻找合作者。那也会写一篇不错的论文:“作为编程语言的机器学习管道”:)

【讨论】:

以上是关于如何最好地处理 Neuraxle 管道中的错误和/或丢失数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确实现过滤 data_inputs 的 Neuraxle 管道步骤?

在 neuraxle 管道中使用 fit_params

是否可以将多个管道组合到 Neuraxle 或 sklearn 中的单个估计器中以创建多输出分类器并一次性适应

Neuraxle 中的默认超参数值

如何使用 neuraxle 实现延迟数据加载的存储库?

使用 HTTP 管道时如何干净地处理所有可能的错误?