使用 hydra 覆盖子模块的完整配置
override complete config for submodule with hydra
所以,我有一个 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 文件
修改默认列表时,使用斜杠 ('/'
) 而不是句点 ('.'
) 作为路径组件的分隔符:
python myapp.py model/encoder=vae_encoder
而不是
python myapp.py model.encoder=vae_encoder
所以,我有一个 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 文件
修改默认列表时,使用斜杠 ('/'
) 而不是句点 ('.'
) 作为路径组件的分隔符:
python myapp.py model/encoder=vae_encoder
而不是
python myapp.py model.encoder=vae_encoder