使用 Trains 跟踪单独的训练/测试过程

Posted

技术标签:

【中文标题】使用 Trains 跟踪单独的训练/测试过程【英文标题】:Tracking separate train/test processes with Trains 【发布时间】:2020-10-01 14:03:55 【问题描述】:

在我的设置中,我运行了一个训练模型并开始生成检查点的脚本。另一个脚本监视新的检查点并评估它们。脚本并行运行,因此评估只是训练后的一步。

支持这种情况的正确轨道配置是什么?

【问题讨论】:

【参考方案1】:

免责声明:我是allegro.ai Trains 团队的一员

你有两个实验吗?一种用于测试,一种用于训练?

如果您确实有两个实验,那么我会确保模型都登录到它们中(如果它们存储在同一个共享文件夹/s3/etc 中,这将是自动的) 然后你可以快速看到每个人的表现。

另一个选项是共享同一个实验,然后第二个过程将报告添加到原始实验中,这意味着您必须以某种方式将实验 ID 传递给它。 然后你可以这样做:

task = Task.get_task(task_id='training_task_id`)
task.get_logger().report_scalar('title', 'loss', value=0.4, iteration=1)

编辑: 两个进程总是一起启动,还是检查点测试是通用代码?

EDIT2:

假设您有训练模型的主脚本。此实验具有唯一的任务 ID:

my_uid = Task.current_task().id

我们还假设你有办法将它传递给你的第二个进程(如果这是一个实际的子进程,它会继承 os 环境变量,所以你可以这样做os.environ['MY_TASK_ID']=my_uid

然后在评估脚本中,您可以像这样直接向主要培训任务报告:

train_task = Task.get_task(task_id=os.environ['MY_TASK_ID'])
train_task.get_logger().report_scalar('title', 'loss', value=0.4, iteration=1)

【讨论】:

最好是在火车中它们会作为一个实验出现。这些是单独的通用脚本,并行运行。所以训练脚本仍处于运行状态,根据共享实验 id 的文档将无法正常工作...... @MichaelLitvin " 并且根据共享实验 ID 的文档将无法正常工作..." 不知道你的意思是什么,但它是受支持的。我用完整的解释编辑了原始答案。主要的警告是将任务 UID 传递给评估过程。但这是一个技术细节,一旦我们了解了设置,就可以轻松解决 J 文档说,为了让任务被重用,“任务的状态是草稿、完成、失败或中止”。在我的场景中,训练和评估是两个并行运行的独立脚本。训练生成模型检查点,评估读取它们并生成指标。我希望这两个脚本都写入同一个任务,但是当我运行评估时,训练任务将处于运行状态。 我明白了...似乎我们需要重新措辞一下文档。 “为了让任务被重用,……”,“重用”这个词有点模棱两可,应该说的是,当调用Task.init时,如果在之前的运行中没有工件,则会创建一个新任务/models 创建或任务未存档/发布。归根结底,它与您的用例无关。我编辑的回复应该可以解决您的问题,训练脚本会创建任务(稍后在退出时将其关闭),评估脚本将(并行)报告给同一个任务。有意义吗?【参考方案2】:

@MichaelLitvin, 我们遇到了同样的问题,并且我们在训练和测试中登录的所有内容也有相同的名称,因为它来自相同的代码(显然)。 为了避免在训练图中出现训练/测试混乱,我们修改了 tensorflow_bind.py 为“训练”和“验证”流添加不同的前缀。 Trains 的错误修复是添加一个 logdir 名称(这对我们来说不是很清楚)。

*这是 1-2 年前完成的,所以现在可能是多余的

干杯, 大干

【讨论】:

Hey Dagan:) 很高兴听到您有类似的工作流程。我最终使用相同的任务进行训练/测试,并在测试中手动记录内容,所以我没有命名问题。

以上是关于使用 Trains 跟踪单独的训练/测试过程的主要内容,如果未能解决你的问题,请参考以下文章

划分训练集与测试集

如何在 Giza++ 中进行训练和测试步骤?

训练集,验证集,测试集的作用

资产跟踪产品测试工具mPower1203如何使用python对接

如何使用 K-nearest neighbour 训练和测试数据?

机器学习中用来防止过拟合的方法有哪些?