配置管理工具——omegaconf

news/2024/9/22 17:26:35 标签: python

omegaconf是专门用来解析.yaml文件,支持对yaml中设置参数的变量插值类型检查默认值处理层次化配置。参考:omegaconf,一个超强的 Python 库!_omeaconf-CSDN博客

主要介绍一下几个常用到的功能(持续补充...):

1. 导入.yaml

假设你的工作目录下有两个文件,一个是config.yaml,一个是main.py。yaml文件里面的内容:

python"># config.yaml
model:
  name: resnet
  num_layers: 18
training:
  batch_size: 64
  learning_rate: 0.001

可以使用如下代码解析并导入.yaml文件:

python">from omegaconf import OmegaConf

# 加载配置文件
config = OmegaConf.load("config.yaml")
print(type(config))
# <class 'omegaconf.dictconfig.DictConfig'>

# 将配置文件转换为 Python 字典
config_dict = OmegaConf.to_container(config, resolve=True)
print(type(config_dict))
# <class 'dict'>

# 使用.访问里面的属性
print(OmegaConf.to_yaml(config))
# model:
#   name: resnet50
#   layers: 18
# training:
#   batch_size: 64
#   epochs: 10

解释一下`OmegaConf.save`中的参数`resolve`的含义,`resolve=True`意味着允许插值,举个例子,比如你的配置文件里面的某个参数引用了本配置文件的其他参数,比如:

python"># config.yaml
model:
  name: resnet
  num_layers: 20
  heads_num: 34
training:
  batch_size: ${model.num_layers}
  learning_rate: 0.001
  optimizer: Adam

使用`resolve=True`后,字典是

python">{'model': {'name': 'resnet', 'num_layers': 20, 'heads_num': 34}, 'training': {'batch_size': 20, 'learning_rate': 0.001, 'optimizer': 'Adam'}}

可以看到,`batch_size`变成了和`num_layers`一样的值。

2. 修改后存入.yaml文件

分以下几种情况:

一种是创建字典,然后用`OmegaConf`存到.yaml“:

python">from omegaconf import OmegaConf

my_dict = {
    "model":{
        "name": "resnet",
        "num_layers": 18
    },
    "training":{
        "batch_size": 64,
        "learning_rate": 0.001
    }
}
        
# 创建配置
config = OmegaConf.create(my_dict)
print(type(config))
# <class 'omegaconf.dictconfig.DictConfig'>

# 存到.yaml文件
OmegaConf.save(config, "mydict.yaml")

一种是在原来的基础上修改了某个参数值,再存储:

python">from omegaconf import OmegaConf

# 加载配置文件
config = OmegaConf.load("config.yaml")
print(type(config))
# <class 'omegaconf.dictconfig.DictConfig'>

config.model.num_layers = 20

# 存到.yaml文件
OmegaConf.save(config, "config.yaml")

还有一种是有两个不同的config文件,比如config1.yaml和config2.yaml,config2.yaml对config1.yaml某些值进行了修改,并且包含一些config1.yaml中没有的参数,那么可以通过下面的代码进行合并。比如config1.yaml和config2.yaml的内容分别是:

python"># config1.yaml
model:
  name: resnet
  num_layers: 18
  heads_num: 34
training:
  batch_size: 64
  learning_rate: 0.001
python"># config2.yaml
model:
  name: resnet
  num_layers: 20
training:
  batch_size: 64
  learning_rate: 0.001
  optimizer: Adam
python">from omegaconf import OmegaConf

# 加载配置文件
config1 = OmegaConf.load("config1.yaml")
config2 = OmegaConf.load("config2.yaml")

config1 = OmegaConf.merge(config1, config2)

# 存到.yaml文件
OmegaConf.save(config1, "config1.yaml")

则合并之后的config1就变成了:

python"># config1.yaml
model:
  name: resnet
  num_layers: 20
  heads_num: 34
training:
  batch_size: 64
  learning_rate: 0.001
  optimizer: Adam

3. 命令行输入参数

OmegaConf还支持从命令行中接收参数。

python"># config.yaml
model:
  name: resnet50
  layers: 50

training:
  batch_size: 64
  epochs: 10
  optimizer: adam

通过下面的代码:

python">from omegaconf import OmegaConf
import sys

# 导入配置参数
config = OmegaConf.load("config.yaml")

# 解析命令行参数
overrides = OmegaConf.from_cli(sys.argv[1:])

# 将命令行参数与配置文件合并
config = OmegaConf.merge(config, overrides)

print(config)
python">python main.py model.layers=29

就可以修改配置文件。


http://www.niftyadmin.cn/n/5670657.html

相关文章

Leetcode面试经典150题-39.组合总数

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被选取 。如…

行人持刀检测数据集 voc yolo

行人持刀检测数据集 9000张 持刀检测 带标注 voc yolo 行人持刀检测数据集 数据集描述 该数据集旨在用于行人持刀行为的检测任务&#xff0c;涵盖了多种场景下的行人图像&#xff0c;特别是那些携带刀具的行人。数据集包含大量的图像及其对应的标注信息&#xff0c;可用于训练…

【前端】ES6:Proxy代理和Reflect对象

文章目录 1 Proxy代理1.1 get方法1.2 set方法1.3 has方法1.4 this问题 2 Reflect对象2.1 代替Object的某些方法2.2 修改某些Object方法返回结果2.3 命令式变为函数行为2.4 配合Proxy 1 Proxy代理 Proxy如其名&#xff0c;它的作用是在对象和和对象的属性值之间设置一个代理&am…

制造业的智能化革命:工业物联网(IIoT)的优势、层级应用及挑战解析

在全球制造业的蓬勃发展中&#xff0c;工业物联网&#xff08;IIoT&#xff09;作为一股颠覆性力量&#xff0c;正逐步重塑传统制造业的面貌。IIoT技术通过无缝连接设备、系统与人员&#xff0c;促进了数据的即时流通与处理&#xff0c;不仅极大地提升了制造效率&#xff0c;还…

Linux常见查看文件命令

目录 一、cat 1.1. 查看文件内容 1.2. 创建文件 1.3. 追加内容到文件 1.4. 连接文件 1.5. 显示多个文件的内容 1.6. 使用管道 1.7. 查看文件的最后几行 1.8. 使用 -n 选项显示行号 1.9. 使用 -b 选项仅显示非空行的行号 二、tac 三、less 四、more 五、head 六、…

Go语言并发编程中的超时与取消机制解析

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 并发编程是Go语言的核心优势之一,而在实际应用中,超时和取消操作会频繁出现。超时机制能够帮助我们理解系统行为,防止系统因为某些任务执行过长而陷入困境。与此同时,取消操作则是应对超时的一种自然反应。此…

机器学习 and 深度学习

机器学习&#xff08;Machine Learning, ML&#xff09;和深度学习&#xff08;Deep Learning, DL&#xff09;是人工智能领域中的两个重要分支&#xff0c;它们之间存在一定的联系与区别。 机器学习 机器学习是指让计算机通过数据来“学习”如何完成特定任务的技术。它依赖于…

消息中间件---Kafka

一、什么是Kafka&#xff1f; Kafka是一个分布式流处理平台,类似于消息队列或企业消息传递系统&#xff1b; 流处理事什么呢&#xff1f; 流处理就是数据处理工作流&#xff0c;本质上是一种计算机编程范例。流处理是对接收到的新数据事件的连续处理。‌它涉及对从生产者到消…