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

知乎—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 dict
path = '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文件中都有相同的参数,如果命令行指定了参数,那么代码运行时使用的参数是命令行输入的参数。

猜您喜欢:

0e7b53a10d5e77746011d5ca4a114a7c.png 戳我,查看GAN的系列专辑~!

一顿午饭外卖,成为CV视觉的前沿弄潮儿!

超110篇!CVPR 2021最全GAN论文汇总梳理!

超100篇!CVPR 2020最全GAN论文梳理汇总!

拆解组新的GAN:解耦表征MixNMatch

StarGAN第2版:多域多样性图像生成

附下载 | 《可解释的机器学习》中文版

附下载 |《TensorFlow 2.0 深度学习算法实战》

附下载 |《计算机视觉中的数学方法》分享

《基于深度学习的表面缺陷检测方法综述》

《零样本图像分类综述: 十年进展》

《基于深度神经网络的少样本学习综述》

0c7aaee108678a0b9982a604a5853a0e.png

猜你喜欢

转载自blog.csdn.net/lgzlgz3102/article/details/123516369
今日推荐