🗂
Hydraメモ
hydra自分用のメモ
hydra-core = "^1.1.0"
dir構造
.
├── conf
│ ├── opt
│ │ ├── sgd.yaml
│ │ └── adam.yaml
│ └── config.yaml
├── config.py
└── main.py
config.yaml
# no change working dir
hydra:
run:
dir: ./
output_subdir: null
defaults:
- opt: sgd
# no use logging
- override hydra/hydra_logging: none
- override hydra/job_logging: none
param: "paramです!"
list: [1,2,3]
defualtsの下に書いたものは他のyamlを参照する
sgd.yaml
lr: 0.01
momentum: 0.9
weight_decay: 5e-4
adam.yaml
lr: 0.001
betas: (0.9, 0.999)
eps: 1e-08
weight_decay: 0
コマンドラインからパラメータを渡す
main.py
import os
import hydra
from config import Config
#param = Config.get_cnf()
@hydra.main(config_path="conf", config_name="config.yaml")
def main(param):
print(param)
print(f"Current working directory : {os.getcwd()}")
実行結果
python main.py
{'opt': {'lr': 0.01, 'momentum': 0.9, 'weight_decay': 0.0005}, 'param': 'paramです!', 'list': [1, 2, 3]}
Current working directory : ~/
引数は=でわたし、listはstrにする必要がある
> python main.py opt=adam 'list=[5,6,7]'
{'opt': {'lr': 0.001, 'betas': '(0.9, 0.999)', 'eps': 1e-08, 'weight_decay': 0}, 'param': 'paramです!', 'list': [5, 6, 7]}
Current working directory : ~/
ファイルからパラメータを参照(コマンドラインを使わない)
これはjupyterやunittestなどで利用するときに便利
config.py
import sys
import os
from hydra import compose, initialize_config_dir
class Config():
"""
hydraによる設定値の取得 (conf)
"""
@staticmethod
def get_cnf():
"""
設定値の辞書を取得
@return
cnf: OmegaDict
"""
conf_dir = os.path.join(os.getcwd(), "conf")
if not os.path.isdir(conf_dir):
print(f"Can not find file: {conf_dir}.")
sys.exit(-1)
with initialize_config_dir(config_dir=config.yaml):
cnf = compose(config_name="default.yaml")
return cnf
機械学習でbaselineとなる既存研究ごとのconfig fileを作って、共有しておくと便利かもしれない
Discussion