Hydra 在配置中组合列表
Hydra combine lists in config
假设我有以下 hydra 配置 test.yaml
:
list1 : [0]
list2 : [1,2,3]
是否可以将 list1
和 list2
合并到包含 [0,1,2,3]
的新列表中,也许使用变量插值?
这是九头蛇代码:
import hydra
from omegaconf import OmegaConf
@hydra.main(config_name="test.yaml", config_path="./")
def main(cfg):
OmegaConf.resolve(cfg)
print(cfg)
if __name__ == "__main__":
main()
尝试(失败):
list1 : [0]
list2 : [1,2,3]
list3 :
- ${list1}
- ${list2}
list3
给出 [0,[1,2,3]]
我想要这个的原因是因为我在其他配置文件中有一些长度未知的列表,我想合并它们以创建对象创建的参数。我不希望在代码中这样做,而是直接依赖 hydras 对象实例化(否则我将在任何地方进行列表合并!)。
事实证明这并不太难,确实可以依靠带有自定义解析器的 OmegaConfs 变量插值。
import hydra
from omegaconf import OmegaConf
# custom list merge resolver
OmegaConf.register_new_resolver("merge", lambda x, y : x + y)
@hydra.main(config_name="test.yaml", config_path="./")
def main(cfg):
OmegaConf.resolve(cfg)
print(cfg)
if __name__ == "__main__":
main()
配置文件test.yaml
list1 : [0]
list2 : [1,2,3]
list3 : ${merge:${list1},${list2}}
list3
现在是 [0,1,2,3]
,如您所愿。
假设我有以下 hydra 配置 test.yaml
:
list1 : [0]
list2 : [1,2,3]
是否可以将 list1
和 list2
合并到包含 [0,1,2,3]
的新列表中,也许使用变量插值?
这是九头蛇代码:
import hydra
from omegaconf import OmegaConf
@hydra.main(config_name="test.yaml", config_path="./")
def main(cfg):
OmegaConf.resolve(cfg)
print(cfg)
if __name__ == "__main__":
main()
尝试(失败):
list1 : [0]
list2 : [1,2,3]
list3 :
- ${list1}
- ${list2}
list3
给出 [0,[1,2,3]]
我想要这个的原因是因为我在其他配置文件中有一些长度未知的列表,我想合并它们以创建对象创建的参数。我不希望在代码中这样做,而是直接依赖 hydras 对象实例化(否则我将在任何地方进行列表合并!)。
事实证明这并不太难,确实可以依靠带有自定义解析器的 OmegaConfs 变量插值。
import hydra
from omegaconf import OmegaConf
# custom list merge resolver
OmegaConf.register_new_resolver("merge", lambda x, y : x + y)
@hydra.main(config_name="test.yaml", config_path="./")
def main(cfg):
OmegaConf.resolve(cfg)
print(cfg)
if __name__ == "__main__":
main()
配置文件test.yaml
list1 : [0]
list2 : [1,2,3]
list3 : ${merge:${list1},${list2}}
list3
现在是 [0,1,2,3]
,如您所愿。