安装: pip install yacs
这个方法比
argparse库
好用的地方在于你可以建很多个yaml文件,文件里用不同的参数,当一个实验做完继续做下一个实验时重新建立一个文件即可,而不需要更改argparse的参数或者在命令行修改了,附上我写的argparse的链接
yacs
的使用比较简单,这里我们先看一个实例,然后在介绍一些 yacs库
的方法
一、实例
新建两个文件 config.py
和 training.yaml
config.py
from typing import Any, List
from yacs.config import CfgNode as CN
class Config(object):
def __init__(self, config_yaml: str, config_override: List[Any] = []):
self._C = CN()
self._C.GPU = [0]
self._C.MODEL = CN()
self._C.MODEL.MODE = 'global'
self._C.OPTIM = CN()
self._C.OPTIM.BATCH_SIZE = 1
self._C.OPTIM.NUM_EPOCHS = 100
self._C.TRAINING = CN()
self._C.TRAINING.TRAIN_DIR = 'images_dir/train'
self._C.TRAINING.VAL_DIR = 'images_dir/val'
self._C.TRAINING.SAVE_DIR = 'checkpoints'
self._C.merge_from_file(config_yaml)
self._C.merge_from_list(config_override)
self._C.freeze()
def dump(self, file_path: str):
r"""Save config at the specified file path.
Parameters
----------
file_path: str
(YAML) path to save config at.
"""
self._C.dump(stream=open(file_path, "w"))
def __getattr__(self, attr: str):
return self._C.__getattr__(attr)
def __repr__(self):
return self._C.__repr__()
training.yaml
GPU: [0,1,2,3,4,5]
MODEL:
MODE: 'Deraining'
OPTIM:
BATCH_SIZE: 2
NUM_EPOCHS: 250
TRAINING:
TRAIN_DIR: './Datasets/train'
VAL_DIR: './Datasets/test/Rain100L'
SAVE_DIR: './checkpoints'
使用:将这两个文件放在同一个文件夹下,然后再 main.py
中调用即可
main.py
from config import Config
conf = Config("training.yaml")
print(conf)
'''
CfgNode({'GPU': [0, 1, 2, 3, 4, 5],
'MODEL': CfgNode({'MODE': 'Deraining'}),
'OPTIM': CfgNode({'BATCH_SIZE': 2, 'NUM_EPOCHS': 250}),
'TRAINING': CfgNode({'TRAIN_DIR': './Datasets/train',
'VAL_DIR': './Datasets/test/Rain100L', 'SAVE_DIR': './checkpoints'})})
'''
索引时也比较简单,比如想要知道 MODEL
的 MODE
模式,只需要使用 confi.MODEL.MODE
即可
二、方法
在上面我们展示了 yacs
的基本使用,这里我们介绍 yacs
库的一些方法
我们先来看上面的输出
'''
CfgNode({'GPU': [0, 1, 2, 3, 4, 5],
'MODEL': CfgNode({'MODE': 'Deraining'}),
'OPTIM': CfgNode({'BATCH_SIZE': 2, 'NUM_EPOCHS': 250}),
'TRAINING': CfgNode({'TRAIN_DIR': './Datasets/train',
'VAL_DIR': './Datasets/test/Rain100L', 'SAVE_DIR': './checkpoints'})})
'''
在每个参数前都有 CfgNode
,他是由 CN
来创建的,也就是最初import的 from yacs.config import CfgNode as CN
,并且这个节点可以嵌套使用
看下面代码,我们创建了一个 _C=CN()
之后,又用 _C.MODEL=CN()
,这就实现了嵌套使用,帮助我们理解 MODE
变量是归属于 MODEL
下面的
_C = CN()
_C.GPU = [0]
_C.MODEL = CN()
_C.MODEL.MODE = 'global'
freeze()
函数使用后,我们创建的变量就不可以进行修改了,再次使用 defrost()
函数,变量可以再次修改,例如
_C = CN()
_C.GPU = [0]
_C.MODEL = CN()
_C.MODEL.MODE = 'global'
_C.freeze()
_C.GPU = [0, 1]
_C.defrost()
_C.GPU = [0, 1]
merge_from_file()
是非常重要的一个函数,在一个任务中你可能需要尝试不同的参数进行试验,这就需要这个函数,首先创建 config.py
和 training.yaml
之后,比较两者之间的参数,然后在 config.py
对 _C
初始化之后执行此函数(参考最初的例子),就会修改我们的初始化参数了,也就是说 training.yaml
中的参数会覆盖原有的初始化的参数
注意:training.yaml中不能包含config.py中没有的参数,不然会报错。反过来如果config.py中有的参数我们不需要更改,那么training.yaml可以不设置
还是举个例子方便理解
假设我们 config.py
中初始化的参数为
_C = CN()
_C.GPU = [0]
_C.batch = 64
_C.lr = 0.001
_C.MODEL = CN()
_C.MODEL.MODE = 'global'
那么 training.yaml
中的参数可以设置为
GPU: [0,1,2,3,4,5]
GPU: [0,1,2,3,4,5]
batch: 64
MODEL:
MODE: 'Deraining'
gpu: [0,1,2,3,4]
Original: https://blog.csdn.net/weixin_41978699/article/details/121462006
Author: harry_tea
Title: yacs配置神经网络参数
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/691681/
转载文章受原作者版权保护。转载请注明原作者出处!