这是文件目录:
|-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
我的意图是,九头蛇会用csv_images.yaml
取代csv_images
。这意味着,在运行时对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)
Config
和DatasetConfig
是这样定义的:
@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
时,它工作得很好,并且执行运行时检查。然而,使用${}
进行插值就不是这样了。这是什么,我能做什么?
发布于 2021-06-15 21:09:13
不能使用默认值列表中的插值来引用主配置中的键。
来自Interpolation in the Defaults List上的九头蛇文档
默认列表中的
插值关键点不能引用最终配置对象中的值(目前还不能)。
特别是,重要的是要了解默认列表是在构建Hydra的输出配置之前完全构建的。由于已解析的默认值列表将用于指导输出配置的构建,因此在开始构建输出配置之前,必须先处理默认值。
由于默认值列表中的内插必须在构建输出配置之前解决,因此无法内插到输出配置中的值。
另一方面,可以使用插值来引用默认值列表中的其他值。例如,您可以尝试执行以下操作:
# example.yaml
defaults:
- data: csv_images
- data_conf: "${data}"
https://stackoverflow.com/questions/67280041
复制相似问题