与直接在目录里面添加yaml文件不同,`ConfigStore`支持使用类的方法,定义配置。参考资料:Config Store API | Hydra
假设我们的目录结构是:
├─ conf
│ └─ dataset
│ └─ coco.yaml
└── main.py
我们可以很方便的用Hydra读取`coco.yaml`的配置:
import hydra
from omegaconf import DictConfig, OmegaConf
@hydra.main(config_path="conf")
def func(config: DictConfig):
print(OmegaConf.to_yaml(config))
if __name__ == "__main__":
func()
然后在命令行运行:
python main.py +dataset=coco
或者指定`config_name`:
import hydra
from omegaconf import DictConfig, OmegaConf
@hydra.main(config_path="conf/dataset", config_name="coco")
def func(config: DictConfig):
print(OmegaConf.to_yaml(config))
if __name__ == "__main__":
func()
选择配置dataset感觉还是第一种好些。
`ConfigStore`可以让我们在python脚本中写一个类作为配置的yaml,不需要我们在新建yaml往里写东西了。这种可能是用在自己写了个.py配置文件的情况:
import hydra
from hydra.core.config_store import ConfigStore
from omegaconf import DictConfig, OmegaConf
from dataclasses import dataclass
@dataclass
class ImageNetConfig:
name: str = "imagenet"
size: str = "200k"
cs = ConfigStore.instance()
# Registering the Config class with the name `postgresql` with the config group `db`
cs.store(name="imagenet", group="dataset", node=ImageNetConfig)
@hydra.main(config_path="conf")
def func(config: DictConfig):
print(OmegaConf.to_yaml(config))
if __name__ == "__main__":
func()
在命令行运行:
python main.py +dataset=imagenet
就可以切换数据集配置啦,而且不需要再新建个`imagenet.yaml`