如何在Hydra中使用OmegaConf custom interpolation
一些背景知识:可以为平方根定义自定义插值:
from omegaconf import OmegaConf
import math
OmegaConf.register_resolver("sqrt", lambda x: math.sqrt(float(x)))并将其与以下config.yaml一起使用:
foo: ${sqrt:9}加载和打印foo:
cfg = OmegaConf.load('config.yaml')
print(cfg.foo)输出3.0
在使用Hydra尝试此操作时:
import hydra
@hydra.main(config_path="config.yaml")
def main(cfg):
print(cfg.foo)
if __name__ == "__main__":
main()我得到以下错误:
Unsupported interpolation type sqrt
full_key: foo
reference_type=Optional[Dict[Any, Any]]
object_type=dict如何在使用Hydra时注册我的解析器?
发布于 2020-05-12 02:27:33
您可以提前注册您的自定义解析器:
config.yaml:
foo: ${sqrt:9}main.py:
from omegaconf import OmegaConf
import math
import hydra
OmegaConf.register_new_resolver("sqrt", lambda x: math.sqrt(float(x)))
@hydra.main(config_path=".", config_name="config")
def main(cfg):
print(cfg.foo)
if __name__ == "__main__":
main()这将打印3.0。
这种方法在Compose API上也能很好地工作。自定义解析器的评估发生在您访问节点时(懒惰地)。你只需要在访问解析器之前注册它。
https://stackoverflow.com/questions/61714759
复制相似问题