0

在我的 config.yaml 中,如何同时传递两个数据集,例如 cifar 和 cinic?我可以将多个配置组传递给默认列表吗?

这适用于我想在混合数据集上训练我的模型,但我不想为每个可能的组合创建一个配置组的情况。

├── config.yaml
└── dataset
    ├──  cifar.yaml
    └── imagenet.yaml
    └── cinic.yaml

我尝试如下:

dataset: 
  - cifar
  - cinic

这导致以下错误:

Could not load train_dataset/['cifar', 'cinic']. Available options 'cifar ... '

4

1 回答 1

1

当前配置组是互斥的。Hydra 1.1 计划对此提供支持。见问题 499

一种可能的解决方法是将所有内容放在配置中并使用插值:

all_datasets:
  imagenet:
    name: imagenet
  cifar10:
    name: cifar10

datasets:
  - ${all_datasets.imagenet}
  - ${all_datasets.cifar10}

这样,您可以从命令行(使用插值)将数据集覆盖到不同的数据集列表。

如果您想以一些额外的代码为代价来简化使用,您可以执行以下操作:

all_datasets:
  ...

datasets_list:
  - imagenet
  - cifar10

datasets: []
@hydra.main(config_path="conf", config_name="config")
def my_app(cfg: DictConfig) -> None:
  for ds in cfg.datasets_list:
    cfg.datasets.append(cfg.all_datasets[ds])

if __name__ == "__main__":
    my_app()

我没有对此进行测试,但希望您能理解。

于 2020-09-25T22:26:27.380 回答