yacs--Python项目配置系统
最近深度学习的项目准备上线,但是做深度学习的小伙伴都会被网络中的众多超参数弄的焦头烂额吧。在项目测试时我们可以在程序中写死,但是真正上线的话还需要规范一点的。通过阅读大神的代码,发现一个好的工具使得程序代码变得非常优雅这就是yacs这个代码配置系统。yacs语法非常简单,上手非常的快。yacs有点类似于argparse,只不过用的时候有差别,argparse需要在运行文件中写一堆类似 --input --output_dir
一类的东西,而yacs写好之后就可以放到别的文档中,非常方便管理,也很清晰。yacs主要有两种使用:
- 用来指定local variable(Configuration as local variable)
- 用来指定global singleton(Configuration as a global singleton)
这里我们使用主要是第一种方法,用来配置本地变量。
如何使用
这里需要首先下载yacs这个库,这里就不赘述了。下面说主要步骤:
- 首先我们在项目中创建一个config的独立模块,然后在创建
config.py
或者default.py
的配置文件。这是大家约定的习俗,但是我还是建议命名为default.py
这样导入包的时候也显的更加的优雅了。其实理解yacs主要一点就是节点的概念,实际节点就是一个CfgNode
的实例,然后再配置该节点的信息就可以了。然后就是根据需求文件格式清晰的进行配置了:
from yacs.config import CfgNode as CN
_C = CN()
# ---------------------------------------------
# 配置系统信息
# ---------------------------------------------
_C.SYSTEM = CN() # 创建系统节点
_C.SYSTEM.NUM_GPUS = 8
_C.SYSTEM.DEVICE_ID = 0 # ---------------------------------------------
# 配置属性1信息
# ---------------------------------------------
_C.ASIE = CN()
_C.ASIE.LINE = 0.5
_C.ASIE.MINCY = 0.3
_C.ASIE.MAXCY = 0.7
# ---------------------------------------------
# 配置属性2信息
# ---------------------------------------------
_C.GATE = CN()
_C.GATE.LINE = 0.5
_C.GATE.CYMIN = 0.35
_C.GATE.CYMAX = 0.45
_C.OUTPUT_DIR = ""
_C.TRAIN = CN() # 配置节点TRAIN
_C.TRAIN.HYPERPARAMETER_1 = 0.1
_C.TRAIN.SCALES = (2, 3)
cfg = _C # 为了导包的时候好看些
- 读取yacs配置信息也很简单的,只需要在项目中导入就可以使用了:
from config.config import cfg#导入包
print(cfg.SYSTEM.NUM_GPUS)#获取配置信息
读取yaml文件
yaml文件相信对很多人也不陌生的,它也是我们常用的配置文件。yacs还有一个强大的功能就是读取yaml文件,这个功能是不是很厉害呀。其实使用起来也很简单,只需简单的两行代码就可以了:
print(cfg.SYSTEM.NUM_GPUS)#原先配置的值
cfg.merge_from_file("./config/experiment.yaml")#加载yaml文件
cfg.freeze()#防止文件改变
print(cfg.SYSTEM.NUM_GPUS)#修改配置后的值
我们首先需要创建一个yaml格式的配置文件,然后进行merge
就行了,最后一定要加上freeze()
防止值改变。
友情提示:当读取yaml文件时候,yaml的键和值一定是yacs配置文件中的,否则会报错的,这一点使用一定要谨记!