我想运行Hydra multirun,但在配置文件中指定扫描。在请求功能请求之前,我想知道是否有办法做到这一点。
到目前为止,我尝试过的内容如下:
树结构:
.
├── conf
│ ├── compile
│ │ ├── base.yaml
│ │ └── grid_search.yaml
│ └── config.yaml
└── my_app.py
内容my_appy.py
:
import hydra
from omegaconf import DictConfig, OmegaConf
@hydra.main(config_path="conf", config_name="config")
def my_app(cfg : DictConfig) -> None:
print(OmegaConf.to_yaml(cfg, resolve=True))
if __name__ == "__main__":
my_app()
内容conf/config.yaml
:
defaults:
- compile: base
内容conf/compile/base.yaml
:
loss: mse
optimizer: adam
内容conf/compile/grid_search.yaml
:
defaults:
- base
lr: 1e-2,1e-3,1e-4
当我运行时python my_app.py -m compile=grid_search
,我得到以下输出:
[2022-01-07 10:08:05,414][HYDRA] Launching 1 jobs locally
[2022-01-07 10:08:05,414][HYDRA] #0 : compile=grid_search
compile:
loss: mse
optimizer: adam
lr: 1e-2,1e-3,1e-4
这是我理解的输出,因为在此示例中,无法区分保存列表的配置变量和要扫描的配置变量。有没有在配置文件中指出这样的事情?
基本上我希望能够在配置文件中而不是在命令行或 shell 脚本中指定我的网格搜索。
额外的问题:对于由字典覆盖指定的扫描,这将如何完成,就像在这个问题中一样?