YAML配置文件和argparse模块的使用

yaml配置文件和argparse应该是深度学习研究人员要掌握的最基础的技能了~

一、YAML配置文件

yaml文件是一种配置文件,我最早接触它是在学习yolov5的官方代码的时候。虽然之前没有怎么接触过ini、conf和py等配置文件,但是使用过yaml之后发现是真的方便,所以来总结一下yaml文件读写相关的操作。
官方文档

1、基本用法

yaml文件并不是python自带的,需要通过pip install PyYaml 指令安装。
基本规则:
1、大小写敏感
2、使用缩进表示层次关系(和python用法一致)
3、缩进时不允许使用Tab,只允许使用空格;缩进的空格数目不重要,只要相同层级的元素左对齐即可
4、和python一致,都可以使用#进行注释

yaml中的基本数据类型:字符串、整型、浮点型、布尔型、null、时间、日期

2、创建一个yaml文件

很多时候我们都不是通过代码往一个yaml文件写入内容,而是直接新建一个yaml文件,然后和txt文本一样写入的。在pycharm项目文件夹里面点击右键new->file,输入data.yaml
在这里插入图片描述
这一点非常好:yaml可以存放不同类型的数据,并且不会改变原有数据类型,数据类型在读取时都会被原样输出。

3、读取yaml文件

一般通过yaml.load()方法读取yaml文件,然后通过关键词名称来获取想要的数据

import yaml
def read_yaml():
    with open("data.yaml", encoding='utf-8') as f:
        config = yaml.load(f.read(), Loader=yaml.FullLoader)
        epoch = config['epoch']
        train_path = config['train_dataRoot']
        #print(config)
read_yaml()

4、写入yaml文件

yaml.dump()方法可以接受一个python对象并生成一个yaml文档,它接受第二个可选参数,但是必须是一个打开的文本或者二进制文件。

config = {
    "test_dataRoot": "./dataset/test",
    "epoch": 200,
    "batch_size": 12,
    "anchors": [10,12,24,19,37,50]
}

import yaml
def write_yaml():
    with open("data.yaml", encoding='utf-8',mode='w') as f:
        try:
            yaml.dump(data=config,stream=f,allow_unicode=True)
        except Exception as e:
            print(e)

write_yaml()

需要注意的是,写入yaml之后原来config中的风格和顺序都被改变,同时还会覆盖data.yaml中的所有内容。目前还没有方法能够解决这个问题,只能修改yaml的源代码。

二、argparse模块

argsparse是python的命令行解析的标准模块,内置于python,不需要安装。主要作用是通过命令行运行程序时可以直接向程序传入参数,对于在服务器跑代码的人来说简直太好用了!

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--resume', type=str, default=True, help='path to pre-trained parameters')
parser.add_argument('--ckpt', type=int, default=0, help='num of checkpoints')
parser.add_argument('--start-epoch', type=int, default=1)
parser.add_argument('--cfg', type=str, default='./cfg.yaml', help='hyperparameters path')
parser.add_argument('--epochs', type=int, default=200)
parser.add_argument('--batch-size', type=int, default=8, help='total batch size for all GPUs')
parser.add_argument('--workers', type=int, default=4, help='maximum number of dataloader workers')
parser.add_argument('--save-epoch', type=int, default=1)
parser.add_argument('--cuda', action='store_true', default=True, help='use cuda')
args = parser.parse_args()
args = parser.parse_args()

print(args.epochs)

1、首先创建一个ArgumentParser对象,ArgumentParser 对象包含将命令行解析成 Python 数据类型所需的全部信息。
2、添加参数
给一个 ArgumentParser 添加程序参数信息是通过调用 add_argument() 方法完成的。其参数如下所示:
在这里插入图片描述

这里我们只需要知道第一个参数表示变量名称,注意在定义的时候下划线"_“要使用”-"代替
type表示数据类型,default表示默认的值,help用于对这个参数进行提示和简单的描述
3、解析参数
最后通过 parse_args() 方法解析参数。它将检查命令行,把每个参数转换为适当的类型然后调用相应的操作。
4、最后我们可以在命令行里面通过命令运行代码,如果没有做设定的话就会按照默认值运行代码

python test.py --epochs=50 --cfg='./config.yaml'

参考网址:
[1] python yaml用法详解
[2] YAML文件读取和写入
[3] argparse — 命令行选项、参数和子命令解析器
[4] argparse模块用法实例详解

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值