yacs库的使用——配置神经网络超参数

yacs库的使用——配置神经网络超参数

纪录下本人使用分布式训练神经网络时采用yacs库配置神经网络的超参数的理解,开始学习吧~

概念:YACS是一个轻量级库,使用*.YAML格式的文件进行参数的存储,用于定义和管理系统配置,这些“配置”通常涵盖诸如用于训练机器学习模型的超参数或可配置模型超参数(诸如卷积神经网络的深度)之类的概念。本人采用.yaml文件j进行每个模型训练的配置(YACS使用YAML作为简单的,人类可读的序列化格式.)

用法

YACS可以以各种灵活的方式使用。主要范例有两种:

(1)配置为局部变量 (local variable) 推荐使用
(2)配置为全局单例(global singleton)

使用yacs流程

要在你的项目中使用yacs库,一般是以下流程:

(1)首先要创建一个项目配置文件

这个配置文件通常称为config.py或defaults.py。 我们需要在文件中指定所有默认,此文件是所有可配置选项的一站式参考点。(也就是为所有的配置提供默认值) 它应该有很好的文档记录,并为所有选项提供合理的默认值。

#本人的是defaults.py
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import os

from yacs.config import CfgNode as CN   #yacs


_C = CN()      #创建一个配置节点_C(配置网络整体的节点)

_C.OUTPUT_DIR = ''     #输出路径
_C.LOG_DIR = ''         #存放日志文件路径
_C.DATA_DIR = ''       #数据路径
_C.GPUS = (0,)         #GPU的数目
_C.WORKERS = 4         #分布式训练的进程数目
_C.PRINT_FREQ = 20     
_C.AUTO_RESUME = False
_C.PIN_MEMORY = True   #锁页内存,创建DataLoader时,意味着生成的Tensor数据最开始是属于内存中的锁页内存,这样将内存的Tensor转义到GPU的显存就会更快一些。显卡中的显存全部是锁页内存
_C.RANK = 0            #rank表示进程序号,用于进程间通讯,表征进程优先级。rank = 0 的主机为 master 节点,在各进程梯度计算完成之后,各进程需要将梯度进行汇总平均,然后再由 rank=0 的进程广播

# Cudnn related params
_C.CUDNN = CN()         #创建新的配置节点_C.CUDNN(cuDNN加速节点)
_C.CUDNN.BENCHMARK = True  #内置的 cuDNN 的 auto-tuner 自动寻找最适合当前配置的高效算法   
_C.CUDNN.DETERMINISTIC = False  #避免计算中有随机性,每次网络前馈结果略有差异的波动
_C.CUDNN.ENABLED = True         #设置cuDNN使用非确定性算法

(2)接下来,需要创建YAML配置文件

通常你会为每个实验(也就是你的每一次训练)创建一个.yaml文件。每个配置文件仅重写该实验中需要更改的配置选项,这个文件里只需要写出需要改变的参数, 其它的使用config.py/default.py里默认的就行了

AUTO_RESUME: true
CUDNN:
  BENCHMARK: true
  DETERMINISTIC: false
  ENABLED: true
DATA_DIR: ''
GPUS: (0,1)
OUTPUT_DIR: 'output'
LOG_DIR: 'log'
WORKERS: 24
PRINT_FREQ: 100

注意:key和value之间必须有空格

(3)最后可以在你的实际项目代码使用配置,读取yaml文件

在初始设置之后,最好通过调用freeze()方法将配置冻结以防止进一步修改。 配置选项可以通过导入cfg并直接访问它来使用全局选项集(globle singleton模式),或者可以复制cfg并将其作为参数传递(local variable模式)。

# my_project/train.py
 

from config import get_cfg  #局部变量用例模式 
# from config import cfg  # 全局单例用例模式
 
 
if __name__ == "__main__":
  cfg = get_cfg_defaults()
  cfg.merge_from_file("experiment.yaml")
  cfg.freeze()
  print(cfg)
 
  # 使用cfg作为全局通道 
  if cfg.SYSTEM.NUM_GPUS > 0:
    my_project.setup_multi_gpu_support()
 
  model = my_project.create_model(cfg)
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值