首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hydra默认列表中的插值原因和错误

Hydra默认列表中的插值原因和错误
EN

Stack Overflow用户
提问于 2021-04-27 17:03:54
回答 1查看 214关注 0票数 1

这是文件目录:

代码语言:javascript
运行
复制
|-configs
|----data_conf
|--------csv_images.csv
|--------tf_ds.csv
|----example.yaml 

example.yaml是:

代码语言:javascript
运行
复制
data: csv_images

defaults:
  - data_conf: "${data}"

csv_images.yaml

代码语言:javascript
运行
复制
# @package _group_
a: test_a
b: test_b

我的意图是,九头蛇会用csv_images.yaml取代csv_images。这意味着,在运行时对example.yaml的解释将是:

代码语言:javascript
运行
复制
data:
    a: test_a
    b: test_b

我这样定义了一个ConfigStore

代码语言:javascript
运行
复制
config_name = "example"
cs = ConfigStore.instance()
cs.store(name=config_name, node=Config)
cs.store(group='data_conf', name='csv_images', node=DatasetConfig)

ConfigDatasetConfig是这样定义的:

代码语言:javascript
运行
复制
@dataclass
class Config:
    data: Any = MISSING

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

然而,当我运行我的程序时,我得到了以下错误:

代码语言:javascript
运行
复制
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时,它工作得很好,并且执行运行时检查。然而,使用${}进行插值就不是这样了。这是什么,我能做什么?

EN

回答 1

Stack Overflow用户

发布于 2021-06-15 21:09:13

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

来自Interpolation in the Defaults List上的九头蛇文档

默认列表中的

插值关键点不能引用最终配置对象中的值(目前还不能)。

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

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

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

代码语言:javascript
运行
复制
# example.yaml

defaults:
  - data: csv_images
  - data_conf: "${data}"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67280041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档