Переопределить вложенные параметры с помощью команды командной строки kedro run - PullRequest
2 голосов
/ 04 августа 2020

Я использую вложенные параметры в своем parameters.yml и хотел бы переопределить их, используя параметры времени выполнения для команды kedro run CLI:

train:
    batch_size: 32
    train_ratio: 0.9
    epochs: 5

Похоже, что следующее не работает:

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

значения для epoch и batch_size взяты из parameters.yml. Как я могу изменить эти параметры с помощью команды cli?

1 Ответ

1 голос
/ 04 августа 2020

Дополнительные параметры передаются в объект KedroContext через load_context(Path.cwd(), env=env, extra_params=params) в kedro_cli.py. Здесь вы можете видеть, что есть функция обратного вызова (защищенная) с именем _split_params, которая разбивает пары ключ-значение на :.

Этот _split_params сначала разбивает строку на запятые (чтобы получить несколько параметров) и затем по двоеточия. Фактически добавление инструкции печати / регистрации того, что передается в extra_params, покажет вам что-то вроде:

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

Я думаю, у вас есть пара вариантов:

  1. Un-вложенность параметры. Таким образом, вы их правильно переопределите.
  2. Добавление пользовательских logi c в _split_params в kedro_cli.py для создания вложенного словаря на . символов, который передается в забавный c, упомянутый выше. Я думаю, вы можете повторно использовать множество существующих logi c.

NB: это было протестировано на kedro==0.16.2.

NB2: способ kedro разбивает вложенные params использует функции _get_feed_dict и _add_param_to_feed_dict в context.py. В частности, _add_param_to_feed_dict - это рекурсивная функция, которая распаковывает словарь и форматирует его как "{}.{}".format(key, value). ИМО, вы можете использовать лог c отсюда.

...