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



让我们假设你有一个管道,其中的步骤对于某些输入元素可能会失败,例如:FetchSomeImagesFromIds→调整→DoSomethingElse

在这个例子中,第一步从100张图片中下载10张…并将它们传递给resize.

我正在寻找关于如何在管道级别报告或处理这些缺失数据的建议,例如:Pipeline.errors()→PluginX: success: 10, Failed: 90, Total: 100, Errors: key: error

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

想法吗?

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

  1. 创建您的管道和管道步骤。
  2. 创建一个上下文并向上下文添加一个自定义内存库服务,您可以在其中跟踪正确或不正确处理的数据。根据您的需求和更广泛的背景,它可以是正数据库,也可以是负数据库,您可以分别在其中添加处理过的示例或从集合中减去它们。
  3. 调整在第1点创建的管道及其步骤,这样它就可以在handle_transform_data_container方法中使用上下文中的服务。你甚至可以有一个WhileTrue()步骤,它将永远循环,直到BreakIf()步骤将评估一切都已处理,例如,如果你想让你的管道工作,直到一切都已处理,并获取批次,因为他们没有结束条件,除了BreakIf步骤和它的lambda。lambda将调用服务来确定数据处理在哪里。
  4. 在整个处理结束时,无论您是过早地中断(没有任何while循环)还是仅在结束时中断,您仍然可以访问上下文和存储在其中的内容。

更多信息:

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

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

所有这些都将在Neuraxle中完成,但尚未完成。我们在寻找合作者。这也可以成为一篇很好的论文:"机器学习管道作为一种编程语言";:)

最新更新