IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> yacs配置神经网络参数 -> 正文阅读

[人工智能]yacs配置神经网络参数

官方库地址: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.py中的参数可以设置为

# 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中没有的名字
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:20:40  更:2021-11-22 12:22:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 4:38:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码