如何最好地处理 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 管道步骤?