在AzureML上管理列车/测试/val拆分的最佳方法

2024-06-14 05:54:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在使用AzureML处理相当复杂的工作流,包括大型数据集等。我想知道管理预处理步骤的分割结果的最佳方法是什么。我所有的项目都是通过注册数据集作为管道构建的。我希望能够跟踪拆分,以便轻松检索,例如,用于集成测试目的的测试和验证集

在那里应用的最佳模式是什么?将每个中间集注册为不同的数据集?使用运行ID直接检索中间集

坦克斯


Tags: 数据项目方法目的id管道模式步骤
2条回答

我希望我有一个更连贯的答案,好的方面是你处于最前沿,所以,如果你找到一个适合你的模式,你可以宣传它,让它成为最佳实践!希望你觉得我下面的话很有价值

首先,如果您还没有,那么肯定应该使用PipelineDatato作为传递数据b/wPipelineStep的中间工件。通过这种方式,您可以将PipelineData视为半短暂的,因为如果您需要它们,它们是具体化的,但是不需要保留每个PipelineData的每个单一版本。您总是可以使用Azure Storage Explorer获取它们,或者像您所说的那样,使用SDK并从PipelineRun对象向下走

另一个建议是将工作流拆分为以下管道:

  • 特征化管道(所有连接、模切和特征化)
  • 培训管道
  • 评分管道(如果您有批量评分场景)

管道内工件是PipelineData,管道间工件是注册的数据集

为了实际解决将数据拆分与模型关联起来的问题,我们的团队对此进行了研究,特别是因为对于每个序列、测试、拆分,我们还有一个“额外的COL”,其中包含模型不应该看到的标识符或泄漏变量

在我们当前的hack实现中,我们将“gold”数据集注册为特性化管道末端的Azure ML数据集。我们训练管道的第一步是一个PythonScriptStep“分割数据”,它包含我们的训练、测试、分割步骤,并输出一个作为data.pkl的pickle字典。然后,我们可以在任何需要拆分的时候取消拆分,并可以使用用于任何报告需要的索引重新加入。这是一个gist

注册是为了使共享和重用更容易,以便您可以按数据集的名称检索数据集。如果您确实希望在其他实验中重用测试/验证集,那么注册它们是有意义的。然而,如果你只是想记录下你在这个实验中使用的东西,你可以按照你的建议通过Run找到这些信息

相关问题 更多 >