我有以下文件:
├── 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
我该怎么做?
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_
关键字控制)是正确的。
您可以了解更多信息这里。
最后,您可能想使用配置实验的模式。