程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Hydra 默认列表中的插值原因和错误大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Hydra 默认列表中的插值原因和错误?

开发过程中遇到Hydra 默认列表中的插值原因和错误的问题如何解决?下面主要结合日常开发的经验,给出你关于Hydra 默认列表中的插值原因和错误的解决方法建议,希望对你解决Hydra 默认列表中的插值原因和错误有所启发或帮助;

这是文件目录:

|-configs
|----data_conf
|--------csv_images.csv
|--------tf_ds.csv
|----example.yaml 

example.yaml 是:

data: csv_images

defaults:
  - data_conf: "${data}"

csv_images.yaml

# @package _group_
a: test_a
b: test_b

我的意图是 hydra 将用 csv_images 替换 csv_images.yaml。意思是,example.yaml 在运行时的解释是:

data:
    a: test_a
    b: test_b

我以这种方式定义了 ConfigStore

config_name = "example"
cs = ConfigStore.instance()
cs.store(name=config_name,node=Config)
cs.store(group='data_conf',name='csv_images',node=DatasetConfig)

ConfigDatasetConfig 是这样定义的:

@dataclass
class Config:
    data: Any = MISSING

@dataclass
class DatasetConfig:
    a: str = MISSING
    b: str = MISSING

但是,当我运行我的程序时,出现以下错误:

Interpolation key 'data' not found
    full_key: defaults[0].data_conf
    object_type=Dict

Set the environment variable HYDRA_FulL_ERROR=1 for a complete stack trace.

当我将 data_conf 定义为 csv_images 时,它工作正常并执行运行时检查。但是,使用 ${} 进行插值不会。那是什么,我能做什么?

解决方法

无法使用默认列表中的插值来引用主配置中的键。

来自 Interpolation in the Defaults List 上的 Hydra 文档:

默认列表中的插值键不能引用最终配置对象中的值(目前还没有)。

特别是,重要的是要了解在构建 Hydra 的输出配置之前完全构建了默认列表。由于解析的默认值列表将用于指导输出配置的构建,因此有必要先处理默认值,然后再开始构建输出配置。

由于必须在构建输出配置之前解析默认列表中的插值,因此无法插值到输出配置中的值。

另一方面,可以使用插值来引用默认列表中中的其他值。例如,您可以尝试以下操作:

# example.yaml

defaults:
  - data: csv_images
  - data_conf: "${data}"

大佬总结

以上是大佬教程为你收集整理的Hydra 默认列表中的插值原因和错误全部内容,希望文章能够帮你解决Hydra 默认列表中的插值原因和错误所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。