0

所以,我有一个 hydra 模型配置(autoencoder.yaml)定义为:

_target_: student.models.AutoEncoder
defaults:
  - dataloader: msa
  - encoder: default_encoder
  - decoder: vae_decoder
  - scheduler: null
  - optimizer: adam
  - preprocessing: null

batch_size: 256

现在在编码器文件夹中,我有以下 YAML 配置:

- default_encoder.yaml
- vae_encoder.yaml

我的基本配置文件如下:

# @package _global_

defaults:
  - _self_
  - model: autoencoder.yaml
 
  # enable color logging
  - override hydra/hydra_logging: colorlog
  - override hydra/job_logging: colorlog

work_dir: ${hydra:runtime.cwd}
seed: null
name: "default"

现在,我可以这样称呼它:

python myapp.py seed=42  #works

但是当我做类似的事情时:

python myapp.py ++model.encoder=vae_encoder

它带有错误:

Top level config has to be OmegaConf DictConfig, plain dict, or a Structured Config class or instance

我怎样才能通过 hydra 组合替换底层对象?基本上,当我这样做时++model.encoder=vae_encoder,它会将其替换为字符串,而不是引用 yaml 文件

4

1 回答 1

1

修改默认列表时,使用斜杠 ( '/') 而不是句点 ( '.') 作为路径组件的分隔符:

python myapp.py model/encoder=vae_encoder

代替

python myapp.py model.encoder=vae_encoder
于 2022-02-25T18:03:25.537 回答