看了一点关于 OmegaConf 的使用方法,在此简单记录,方便日后查找。
用途
OmegaConf 是一个 python 的库,帮助我们方便地创建、修改、维护配置文件,对于深度学习中参数设置和调整有着很方便地作用
基础用法
创建配置文件
OmegaConf 支持从 yaml、json 等多种文件格式中进行创建,先设置一个简单的配置文件,如下所示的 config.yaml
文件:
model:
name: resnet
num_layers: 18
training:
batch_size: 64
learning_rate: 0.001
可以用 OmegaConf 进行 load:
from omegaconf import OmegaConf
cfg = OmegaConf.load("config.yaml")
这时 config.yaml
文件就已经被 load 到 cfg 中了
修改参数
OmegaConf 修改配置参数也很方便,直接修改即可:
cfg.model.num_layers = 24
这样就将模型层数从 18 修改到 24
文件覆盖
如果想要批量修改参数,也可以从新的 yaml文件中加载,用以覆盖原始配置文件。比如建立一个包含想要覆盖的参数项的文件 override.yaml
:
model:
name: resnet50
num_layers: 24
training:
batch_size: 128
加载后再覆盖原配置:
override = OmegaConf.load("override.yaml")
new_cfg = OmegaConf.merge(cfg, override)
这样新配置文件的参数就被更改了。
命令行读入
OmegaConf 支持命令行读入参数,需要现在配置文件中定义接受命令行传入的参数,使用 @
符号标明,如下所示:
training:
batch_size: 128
learning_rate: 0.001
@epochs: 10
再使用 from_cli
方法解析命令行传入的参数:
import sys
from omegaconf import OmegaConf
overrides = OmegaConf.from_cli(sys.argv[1:])
config = OmegaConf.merge(config, overrides)
这样,当我们运行该python文件时,从命令行直接传入参数即可:
python my_script.py training.@epochs=20
继承配置
假设有一个基础配置 base_config.yaml
:
model:
name: resnet
num_layers: 18
training:
batch_size: 64
learning_rate: 0.001
下面,你想要设计一个继承了该配置的 customed 的配置文件 custom_config
,可以这样写:
_base_: base_config.yaml
training:
batch_size: 128
learning_rate: 0.001
epochs: 10000
```
该配置文件既继承了原有的配置信息,也对原有的配置信息做了一定的修改和增补。