使用kedro run CLI命令覆盖嵌套参数

2024-10-01 07:33:38 发布

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

我正在我的parameters.yml中使用嵌套参数,并希望使用kedro runCLI命令的运行时参数覆盖这些参数:

train:
    batch_size: 32
    train_ratio: 0.9
    epochs: 5

以下内容似乎不起作用:

kedro run --params  train.batch_size:64,train.epochs:50 

历元和批大小的值来自parameters.yml。如何使用cli命令覆盖这些参数


Tags: run命令参数sizecliymlbatchtrain
2条回答

我建议另一种方法。 我将run.py添加到我的Kedro项目文件中,并覆盖KedroContextConfigLoader

现在我可以在CLI中使用类似于kedro run .. params "train_kwargs_max_epochs:1"的东西,它将被转换为train_kwargs.max_epochs = 1

因此,我可以在管道中使用params:train_kwargs,并在节点中使用它初始化培训师:Trainer(**train_kwargs)

如果有人对此感兴趣,我很乐意提供完整的源代码。 问题是当前代码与我客户的源代码深度集成,我需要时间将其分离并发布

附加参数通过kedro_cli.py中的load_context(Path.cwd(), env=env, extra_params=params)传递到KedroContext对象。在这里,您可以看到一个名为_split_params的回调(受保护)函数,它在:上拆分键值对

这个_split_params首先拆分逗号上的字符串(以获得多个参数),然后拆分冒号上的字符串。实际上,添加一个关于传递到extra_params中的内容的打印/日志语句将显示如下内容:

{'train.batch_size': 64, 'train.epochs': 50}

我认为你有几个选择:

  1. 取消对参数的嵌套。这样,您将正确覆盖它们
  2. 将自定义逻辑添加到kedro_cli.py中的_split_params中,以在.字符上创建一个嵌套字典,该字符被传递到上述func中。我认为可以重用很多现有的逻辑

注意:这是在^{上测试的

NB2:kedro拆分嵌套参数的方法是使用context.py中的_get_feed_dict_add_param_to_feed_dict函数。具体来说,_add_param_to_feed_dict是一个递归函数,它将字典解包并格式化为"{}.{}".format(key, value)。在我看来,你可以从这里使用逻辑

相关问题 更多 >