递归初始化以及如何在另一个配置组中使用配置组
Recursive i itialization and how to use config group inside another config group
我正在探索 hydra 中递归初始化的选项。我能够基于 this 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 配置组中使用 normalizer 配置组。现在,如果我调用 tokenizer = instantiate(cfg.tokenizer)
,结果是一个 Tokenizer class 对象,但 tokenizer.normalizer
是一个字符串 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
是一个包含规范器参数的字典,就像这样 {"_target_": ...}
而不是初始化的规范器 class。我怎样才能避免在分词器配置中明确重复规范化器的定义?
我认为目前不支持您想要的内容。
请使用最小配置提交功能请求,并说明当前行为和所需行为。
我正在探索 hydra 中递归初始化的选项。我能够基于 this 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 配置组中使用 normalizer 配置组。现在,如果我调用 tokenizer = instantiate(cfg.tokenizer)
,结果是一个 Tokenizer class 对象,但 tokenizer.normalizer
是一个字符串 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
是一个包含规范器参数的字典,就像这样 {"_target_": ...}
而不是初始化的规范器 class。我怎样才能避免在分词器配置中明确重复规范化器的定义?
我认为目前不支持您想要的内容。 请使用最小配置提交功能请求,并说明当前行为和所需行为。