0

我正在探索 hydra 中递归初始化的选项。我能够基于此 PR设置一个工作示例。在尝试更高级的东西时,我偶然发现了以下问题。我的目录结构如下:

config/
  config.yaml
    /tokenizer
      Tokenizer.yaml
    /normalizer
      Normalizer.yaml

配置包含:

<config.yaml>
default:
  - tokenizer: Tokenizer

<Tokenizer.yaml>
_target_: some.path.Tokenizer
normalizer: Normalizer # I want this to be the Normalizer object after instantiation, but getting string. 

<Normalizer.yaml>
_target_: some.other.path.Normalizer
arg1: value1

我想递归地实例化 Tokenizer 而不需要显式地编写 Normalizer 的所有参数,因为它们都已经在 Normalizer.yaml 文件中提到了。换句话说,我想在标记器配置组中使用规范器配置组。现在,如果我调用tokenizer = instantiate(cfg.tokenizer),结果是一个 Tokenizer 类对象,但是tokenizer.normalizer是一个 string Normalizer。如果我使用值插值并按如下方式设置项目:

<config.yaml>
default:
  - tokenizer: Tokenizer
  - normalizer: Normalizer

<Tokenizer.yaml>
_target_: some.path.Tokenizer
normalizer: ${normalizer} 

<Normalizer.yaml>
_target_: some.other.path.Normalizer
arg1: value1

结果变量tokenizer.normalizer是一个包含 Normalizer 的 args 的 dict,{"_target_": ...}而不是初始化的 Normalizer 类。如何避免需要在标记器配置中显式重复规范器的定义?

4

1 回答 1

1

我认为现在不支持您想要的。请提交具有最小配置的功能请求,并说明当前行为和所需行为。

于 2020-10-23T23:55:11.977 回答