yacs配置神经网络参数

yacs配置神经网络参数本文介绍了 yacs 库在实验配置管理中的应用 通过实例展示了如何创建和使用 config py 及 training yaml 文件

大家好,欢迎来到IT知识分享网。

官方库地址:GitHub

安装:pip install yacs

这个方法比argparse库好用的地方在于你可以建很多个yaml文件,文件里用不同的参数,当一个实验做完继续做下一个实验时重新建立一个文件即可,而不需要更改argparse的参数或者在命令行修改了,附上我写的argparse的链接

yacs的使用比较简单,这里我们先看一个实例,然后在介绍一些yacs库的方法

一、实例

新建两个文件config.pytraining.yaml

config.py

#!/usr/bin/env python3 # -*- coding: utf-8 -* 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' # Override parameter values from YAML file first, then from override list. self._C.merge_from_file(config_yaml) self._C.merge_from_list(config_override) # Make an instantiated object of this class immutable. 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' # Optimization arguments. OPTIM: BATCH_SIZE: 2 NUM_EPOCHS: 250 TRAINING: TRAIN_DIR: './Datasets/train' # path to training data VAL_DIR: './Datasets/test/Rain100L' # path to validation data SAVE_DIR: './checkpoints' # path to save models and images 

使用:将这两个文件放在同一个文件夹下,然后再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'})}) ''' 

索引时也比较简单,比如想要知道MODELMODE模式,只需要使用confi.MODEL.MODE即可

二、方法

在上面我们展示了yacs的基本使用,这里我们介绍yacs库的一些方法

1. config node节点

我们先来看上面的输出

''' 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' 

2. freeze & defrost

freeze()函数使用后,我们创建的变量就不可以进行修改了,再次使用defrost()函数,变量可以再次修改,例如

_C = CN() _C.GPU = [0] # 嵌套 _C.MODEL = CN() _C.MODEL.MODE = 'global' # freeze _C.freeze() _C.GPU = [0, 1] # error ! ! ! # defrost _C.defrost() _C.GPU = [0, 1] # run ! ! ! 

3. merge_from_file

merge_from_file()是非常重要的一个函数,在一个任务中你可能需要尝试不同的参数进行试验,这就需要这个函数,首先创建config.pytraining.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中的参数可以设置为

# run GPU: [0,1,2,3,4,5] # run GPU: [0,1,2,3,4,5] batch: 64 MODEL: MODE: 'Deraining' # error gpu: [0,1,2,3,4] # 出现了config.py中没有的名字 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/116684.html

(0)
上一篇 2025-11-27 08:20
下一篇 2025-11-27 08:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信