使用 hydra 的 optuna 插件时,我可以从另一个配置文件导入搜索 space 吗?
When using the optuna plugin for hydra, can I import the search space from another config file?
我想对同一数据的多个时间序列预测模型进行超参数优化。我正在为 Hydra 使用 Optuna Sweeper 插件。不同的模型具有不同的超参数,因此具有不同的搜索 spaces。目前我的配置文件如下所示:
defaults:
- datasets: data
- models: Ets
- override hydra/sweeper: optuna
- override hydra/sweeper/sampler: tpe
hydra:
# launcher:
# n_jobs: 10
run:
dir: data/outputs/${now:%Y-%m-%d}/${user.user}/${now:%H-%M-%S}
sweeper:
sampler:
seed: 123
direction: minimize
study_name: main_val
storage: null
n_trials: 2
n_jobs: 4
search_space:
# Ets
models.damped_trend:
type: categorical
choices:
- 'True'
- 'False'
# Theta
# models.method:
# type: categorical
# choices:
# - 'additive'
# - 'multiplicative'
现在,当我使用 --multi运行 运行 main_val.py 文件时,我得到了 Ets 的最佳超参数。伟大的。但是当我想 运行 优化另一个模型时,在这个例子中的 Theta 中,我必须手动注释掉 Ets 的搜索 space 并取消注释 Theta 的搜索 space。实际上,每个模型都有更多的参数需要优化,我正在处理 10 个不同的模型。这使我的配置文件变得非常长且令人困惑,而且这个 commenting/uncommenting 东西既烦人又容易出错。
我想从另一个 yaml 文件中为每个模型导入搜索 space。这可能吗?
我尝试了以下方法:
defaults:
- datasets: data
- models: Ets
- search_spaces: Ets
- override hydra/sweeper: optuna
- override hydra/sweeper/sampler: tpe
hydra:
# launcher:
# n_jobs: 10
run:
dir: data/outputs/${now:%Y-%m-%d}/${user.user}/${now:%H-%M-%S}
sweeper:
sampler:
seed: 123
direction: minimize
study_name: main_val
storage: null
n_trials: 2
n_jobs: 4
search_space: search_spaces
文件 search_spaces/Ets.yaml 如下所示:
models.damped_trend:
type: categorical
choices:
- 'True'
- 'False'
但是我得到了错误:
Validation error while composing config:
Cannot assign str to Dict[str, Any]
full_key: hydra.sweeper.search_space
object_type=OptunaSweeperConf
这里有两个选项:
- 使用
@package
指令
- 使用 variable interpolation
详细:
使用 @package
指令
@package
指令可用于将 Ets.yaml
放入 hydra.sweeper.search_space
包中:
defaults:
- datasets: data
- models: Ets
- search_spaces@hydra.sweeper.search_space: Ets
- override hydra/sweeper: optuna
- override hydra/sweeper/sampler: tpe
hydra:
run:
dir: data/outputs/${now:%Y-%m-%d}/${user.user}/${now:%H-%M-%S}
sweeper:
sampler:
seed: 123
direction: minimize
study_name: main_val
storage: null
n_trials: 2
n_jobs: 4
使用变量插值:
字符串插值可用于创建从 hydra.sweeper.search_spaces
到 top-level search_spaces
配置的引用。
defaults:
- datasets: data
- models: Ets
- search_spaces: Ets
- override hydra/sweeper: optuna
- override hydra/sweeper/sampler: tpe
hydra:
run:
dir: data/outputs/${now:%Y-%m-%d}/${user.user}/${now:%H-%M-%S}
sweeper:
sampler:
seed: 123
direction: minimize
study_name: main_val
storage: null
n_trials: 2
n_jobs: 4
search_space: ${search_spaces}
我想对同一数据的多个时间序列预测模型进行超参数优化。我正在为 Hydra 使用 Optuna Sweeper 插件。不同的模型具有不同的超参数,因此具有不同的搜索 spaces。目前我的配置文件如下所示:
defaults:
- datasets: data
- models: Ets
- override hydra/sweeper: optuna
- override hydra/sweeper/sampler: tpe
hydra:
# launcher:
# n_jobs: 10
run:
dir: data/outputs/${now:%Y-%m-%d}/${user.user}/${now:%H-%M-%S}
sweeper:
sampler:
seed: 123
direction: minimize
study_name: main_val
storage: null
n_trials: 2
n_jobs: 4
search_space:
# Ets
models.damped_trend:
type: categorical
choices:
- 'True'
- 'False'
# Theta
# models.method:
# type: categorical
# choices:
# - 'additive'
# - 'multiplicative'
现在,当我使用 --multi运行 运行 main_val.py 文件时,我得到了 Ets 的最佳超参数。伟大的。但是当我想 运行 优化另一个模型时,在这个例子中的 Theta 中,我必须手动注释掉 Ets 的搜索 space 并取消注释 Theta 的搜索 space。实际上,每个模型都有更多的参数需要优化,我正在处理 10 个不同的模型。这使我的配置文件变得非常长且令人困惑,而且这个 commenting/uncommenting 东西既烦人又容易出错。
我想从另一个 yaml 文件中为每个模型导入搜索 space。这可能吗?
我尝试了以下方法:
defaults:
- datasets: data
- models: Ets
- search_spaces: Ets
- override hydra/sweeper: optuna
- override hydra/sweeper/sampler: tpe
hydra:
# launcher:
# n_jobs: 10
run:
dir: data/outputs/${now:%Y-%m-%d}/${user.user}/${now:%H-%M-%S}
sweeper:
sampler:
seed: 123
direction: minimize
study_name: main_val
storage: null
n_trials: 2
n_jobs: 4
search_space: search_spaces
文件 search_spaces/Ets.yaml 如下所示:
models.damped_trend:
type: categorical
choices:
- 'True'
- 'False'
但是我得到了错误:
Validation error while composing config:
Cannot assign str to Dict[str, Any]
full_key: hydra.sweeper.search_space
object_type=OptunaSweeperConf
这里有两个选项:
- 使用
@package
指令 - 使用 variable interpolation
详细:
使用 @package
指令
@package
指令可用于将 Ets.yaml
放入 hydra.sweeper.search_space
包中:
defaults:
- datasets: data
- models: Ets
- search_spaces@hydra.sweeper.search_space: Ets
- override hydra/sweeper: optuna
- override hydra/sweeper/sampler: tpe
hydra:
run:
dir: data/outputs/${now:%Y-%m-%d}/${user.user}/${now:%H-%M-%S}
sweeper:
sampler:
seed: 123
direction: minimize
study_name: main_val
storage: null
n_trials: 2
n_jobs: 4
使用变量插值:
字符串插值可用于创建从 hydra.sweeper.search_spaces
到 top-level search_spaces
配置的引用。
defaults:
- datasets: data
- models: Ets
- search_spaces: Ets
- override hydra/sweeper: optuna
- override hydra/sweeper/sampler: tpe
hydra:
run:
dir: data/outputs/${now:%Y-%m-%d}/${user.user}/${now:%H-%M-%S}
sweeper:
sampler:
seed: 123
direction: minimize
study_name: main_val
storage: null
n_trials: 2
n_jobs: 4
search_space: ${search_spaces}