具有 Hydra 组合的值插值
Value interpolation with hydra composition
我正在使用具有以下结构的 hydra 组合物:
├── configs
│ ├── config.yaml
│ ├── data
│ │ ├── dataset_01.yaml
│ │ └── dataset_02.yaml
│ └── model
│ ├── bert.yaml
│ └── gpt.yaml
- config.yaml
defaults:
- model: bert
- data: dataset_01
...
- data/dataset_01.yaml
# @package _group_
name: "dataset_01"
train:
path: "../resources/datasets/dataset_01/train.jsonl"
num_samples: 1257391
test:
path: "../resources/datasets/dataset_01/test.jsonl"
num_samples: 71892
val:
path: "../resources/datasets/dataset_01/val.jsonl"
num_samples: 73805
- model/bert.yaml
# @package _group_
name: "bert"
encoder: "source.encoder.BertEncoder.BertEncoder"
encoder_hparams:
architecture: "bert-base-uncased"
lr: 1e-7
tokenizer:
architecture: "bert-base-uncased"
predictions:
path: "../resources/predictions/bert_predictions.pt"
- 入口点
@hydra.main(config_path="configs/", config_name="config.yaml")
def perform_tasks(hparams):
model = MyModel(hparams.model)
if __name__ == '__main__':
perform_tasks()
在 hparams.model
的上下文中,OmegaConf 无法插入键 data.name
,因为它不在范围内。
因此,如果有一种方法可以在应用程序开始时引起插值,那就太好了。
OmegaConf 插值是绝对的,并在最终配置上运行。
试试这个:
Hydra 1.0(稳定)
predictions:
path: "../resources/predictions/bert_${data.name}_predictions.pt"
Hydra 1.1(开发)
Hydra 1.1 将不再需要在配置中指定名称。
您将能够在不添加名称字段的情况下使用 hydra:choices.GROUP_NAME
:
进行插值
predictions:
path: "../resources/predictions/bert_${hydra:choices.data}_predictions.pt"
这已记录在案 here。
请注意,这仅在尚未正式发布的 Hydra 1.1 中可用(您可以通过安装开发版本来试用)。
我正在使用具有以下结构的 hydra 组合物:
├── configs
│ ├── config.yaml
│ ├── data
│ │ ├── dataset_01.yaml
│ │ └── dataset_02.yaml
│ └── model
│ ├── bert.yaml
│ └── gpt.yaml
- config.yaml
defaults:
- model: bert
- data: dataset_01
...
- data/dataset_01.yaml
# @package _group_
name: "dataset_01"
train:
path: "../resources/datasets/dataset_01/train.jsonl"
num_samples: 1257391
test:
path: "../resources/datasets/dataset_01/test.jsonl"
num_samples: 71892
val:
path: "../resources/datasets/dataset_01/val.jsonl"
num_samples: 73805
- model/bert.yaml
# @package _group_
name: "bert"
encoder: "source.encoder.BertEncoder.BertEncoder"
encoder_hparams:
architecture: "bert-base-uncased"
lr: 1e-7
tokenizer:
architecture: "bert-base-uncased"
predictions:
path: "../resources/predictions/bert_predictions.pt"
- 入口点
@hydra.main(config_path="configs/", config_name="config.yaml")
def perform_tasks(hparams):
model = MyModel(hparams.model)
if __name__ == '__main__':
perform_tasks()
在 hparams.model
的上下文中,OmegaConf 无法插入键 data.name
,因为它不在范围内。
因此,如果有一种方法可以在应用程序开始时引起插值,那就太好了。
OmegaConf 插值是绝对的,并在最终配置上运行。
试试这个:
Hydra 1.0(稳定)
predictions:
path: "../resources/predictions/bert_${data.name}_predictions.pt"
Hydra 1.1(开发)
Hydra 1.1 将不再需要在配置中指定名称。
您将能够在不添加名称字段的情况下使用 hydra:choices.GROUP_NAME
:
predictions:
path: "../resources/predictions/bert_${hydra:choices.data}_predictions.pt"
这已记录在案 here。 请注意,这仅在尚未正式发布的 Hydra 1.1 中可用(您可以通过安装开发版本来试用)。