0

我有一个配置树,例如:

config.yaml
model/
  model_a.yaml
  model_b.yaml
  model_c.yaml

其中config.yaml包含:

# @package _global_
defaults:
  - _self_
  - model: model_a.yaml

some_var: 42

我想从我的 python 代码或文件本身访问使用的模型配置文件的名称(默认或覆盖)。就像是:

@hydra.main(...)
def main(config):
  model_name = config.model.__filename__

或(来自例如model_a.yaml

dropout: true
dense_layers: 128
model_name: ${__filename__}

提前致谢!

4

1 回答 1

1

查看配置 Hydra - Hydra 文档的介绍页面中提到的hydra.runtime.choices变量。此变量存储一个映射,描述 Hydra 在构成输出配置时所做的每个选择。

model: model_a.yaml在默认列表中使用上面的示例:

# my_app.py
import hydra
from pprint import pprint
from hydra.core.hydra_config import HydraConfig
from omegaconf import OmegaConf

@hydra.main(config_path=".", config_name="config")
def main(config):
    hydra_cfg = HydraConfig.get()
    print("choice of model:")
    pprint(OmegaConf.to_container(hydra_cfg.runtime.choices))

main()

在命令行:

$ python3 app.py
choices used:
{'hydra/callbacks': None,
 'hydra/env': 'default',
 'hydra/help': 'default',
 'hydra/hydra_help': 'default',
 'hydra/hydra_logging': 'default',
 'hydra/job_logging': 'default',
 'hydra/launcher': 'basic',
 'hydra/output': 'default',
 'hydra/sweeper': 'basic',
 'model': 'model_a.yaml'}

如您所见,在此示例中,配置选项model_a.yaml存储在 Hydra 配置中hydra_cfg.runtime.choices.model

于 2021-11-22T17:29:43.303 回答