深度学习代码中argparse以及yaml文件的使用

程序员大白

共 2533字,需浏览 6分钟

 · 2022-03-18

点击上方“程序员大白”,选择“星标”公众号

重磅干货,第一时间送达

知乎—Mr.Hang 侵删
地址:https://zhuanlan.zhihu.com/p/440707265

01

argparse使用总结

首先argparse一般写在

if __name__ == '__main__':
之后,在下方写需要使用的参数;
格式如下:

parse = argparse.ArgumentParser()parse.add_argument('--num_batches', type=int, default=50, help='the num of batch')parse.add_argument('--num_window', type=int, default=5, help='the num of window')parse.add_argument('--weight', type=str, default= '../pretrain.pth', help='the path of pretrained model')opt = parse.parse_args()
parse = argparse.ArgumentParser() 首先创建一个对象,然后用 parse.add_argument方法添加需要的参数值,添加完后用 opt = parse.parse_args()将所有的参数封装在opt内,之后用例如opt.weight就可以调用。
在主函数传入opt参数,即可调用命令行传入的参数值,整个例子如下:

import argparse
def main(opt): print(opt.num_batches)
if __name__ == '__main__':
parse = argparse.ArgumentParser() parse.add_argument('--num_batches', type=int, default=50, help='the num of batch') parse.add_argument('--num_window', type=int, default=5, help='the num of window') parse.add_argument('--weight', type=str, default= '../pretrain.pth', help='the path of pretrained model')
opt = parse.parse_args()    main(opt)

02

Yaml使用总结

yaml文件通常也是用于保存参数,在主函数中用来调用,yaml文件是一个层级结构,以字典形式调用 yaml文件结构如下:

device: 'cpu'
data: train_path: 'data/train' test_path: 'test/train'    num: 1000
特别需要注意缩进使用空格而不是tab,并且层级之间一定要对齐。


03

读取yaml文件

在读取yaml文件时,先将yaml文件里面的内容全部用系统函数读入,然后用yaml.safe_load进行加载,转换成一个字典,返回字典供后续使用。读取代码如下:

def read_yaml(path):    file = open(path, 'r', encoding='utf-8')    string = file.read()    dict = yaml.safe_load(string)
return dict
调用的时候就根据yaml文件里面的结构层次按键值对进行调用:

path = 'config.yaml'Dict = read_yaml(path)device = Dict['device']print(device)
train_path = Dict['data']['train_path']print(train_path)
完整测试代码如下:

import yaml
def read_yaml(path): file = open(path, 'r', encoding='utf-8') string = file.read() dict = yaml.safe_load(string)
return dictpath = 'config.yaml'Dict = read_yaml(path)device = Dict['device']print(device)
train_path = Dict['data']['train_path']print(train_path)

04

yaml与argparse混合使用

看过很多paper的代码,两者基本都是混合使用的,yaml首先可以将全部参数都设置一个默认值,比如网络的层数,激活函数用哪个等等,大多是模型内相关的参数以及train和test使用的数据的地址。
argparse通常设置几个train和test时经常更改的参数,比如训练的epoch,batch_size,learning_rate...
argparse接收的是命令行的输入,所以优先级应该是会高一些;假如argparse和yaml文件中都有相同的参数,如果命令行指定了参数,那么代码运行时使用的参数是命令行输入的参数。

13个你一定要知道的PyTorch特性

解读:为什么要做特征归一化/标准化?

一文搞懂 PyTorch 内部机制

张一鸣:每个逆袭的年轻人,都具备的底层能力




西[]


浏览 75
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报