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模块用法实例详解