使用实验配置覆盖 Hydra 配置 - 额外的文件夹层次结构

问题描述 投票:0回答:1

我正在通过这个 Hydra 文档示例 使用实验配置覆盖主配置。与 Hydra 示例不同,我有另一级文件夹层次结构,用于将所有关联的配置收集到单个子文件夹中。

conf
├── data
│   ├── cifar100_data
│   │   ├── cifar100_extended.yaml
│   │   └── cifar100.yaml
│   └── default.yaml
├── experiment
│   └── cifar100.yaml
└── training_config.yaml

在我的示例中,我有一个基本的

training_config

defaults:
   - data: default

data/default.yaml

# @package data
dataset: mnist
n_classes: 10

以及 cifar100 数据的两个配置文件

cifar100_data/cifar100.yaml

name: cifar100
n_classes: 100

cifar100_data/cifar100_extended.yaml

# @package data
defaults:
  - cifar100
augmentations:
  - rotate

我正在尝试用

training_config
覆盖
experiment/cifar100
-->
python my_app.py experiment=cifar100
:

experiment/cifar100
尝试1:

# @package _global_
defaults:
  - override /data/cifar100_data: cifar100_extended

错误信息:

Hydra.errors.ConfigCompositionException:在“实验/cifar100”中: 无法覆盖“data/cifar100_data”。默认情况下不匹配 列表。

experiment/cifar100
尝试2:

# @package _global_
defaults:
  - override /data: cifar100_data/cifar100_extended

错误信息:

Hydra.errors.MissingConfigException:在 “data/cifar100_data/cifar100_extended”:无法加载 “数据/cifar100”。

与默认配置相比,如何使用额外的层次结构正确运行这样的实验?

python configuration fb-hydra
1个回答
0
投票

这有点不寻常。您的数据配置组应该是

data
,而不是
/data/cifar100_data
,因此第二种形式是正确的:

# @package _global_
defaults:
  - override /data: cifar100_data/cifar100_extended

您收到的错误是:

hydra.errors.MissingConfigException: In 'data/cifar100_data/cifar100_extended': Could not load 'data/cifar100'.

这告诉您,在尝试 data/cifar100_data/cifar100_extended 时,Hydra 尝试加载 data/cifar100 但找不到它。 事实上,该文件位于

data/cifar100_data/cifar100
而不是
data/cifar100

这看起来像一个错误,因为相对配置组条目应该相对于包含的配置,并且 cifa100 就在 cifar100_extended 旁边。

该错误与您不寻常地构建带有子目录的配置组有关,该配置组未得到正确支持(通常期望每个子目录都是其自己的配置组)。

解决方法是将

cifar100_extended.yaml
调整为:

# @package data
defaults:
  - cifar100_data/cifar100
augmentations:
  - rotate
© www.soinside.com 2019 - 2024. All rights reserved.