覆盖 Hydra 中另一个文件中的值

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

我有以下文件:

├── callbacks
│   ├── default.yaml
│   ├── early_stopping.yaml
│   └── finetuning.yaml
├── model
│   ├── model_1.yaml
│   └── model_2.yaml
└── train.yaml

train.yaml

defaults:
  - _self_
  - model: model_1
  - callbacks: default

回调/default.yaml

defaults:
  - finetuning
  - early_stopping
  - _self_

回调/finetuning.yaml

finetuning:
  _target_: callbacks.custom_finetuning.CustomFinetuning
  unfreeze_at_epoch: null
  refreeze_at_epoch: null

model_1.yaml

_target_: models.Model_1

我想覆盖 model_1.yaml 和 model_2.yaml 中的

unfreeze_at_epoch
refreeze_at_epoch
,以便每个模型可以具有不同的值。 我尝试添加以下内容但不起作用:

callbacks:
  finetuning:
    unfreeze_at_epoch: 125
    refreeze_at_epoch: 350

我该怎么做?

yaml overriding config fb-hydra hydra
1个回答
0
投票

model/model_1.yaml
的配置组是模型,这意味着默认情况下定义的所有配置值都在模型节点下。 您可以使用 package 指令 更改它。 在这种情况下,通过将包头设置为
_global_

例如,model_1.yaml 可以变成:

# @package _global_

model:
  _target_: models.Model_1
callbacks:
  finetuning:
    unfreeze_at_epoch: 125
    refreeze_at_epoch: 350

其他一些需要注意的事情是,您配置的组合顺序(由默认列表中的

_self_
关键字控制)是正确的。 您可以了解更多信息这里

最后,您可能想使用配置实验的模式。

© www.soinside.com 2019 - 2024. All rights reserved.