本文已参与「新人创作礼」活动,一起开启掘金创作之路。
json和argparse互相转换
有时候需要将训练的参数保存到文件,方便复现的时候直接加载。可以保存为json文件,这样方便不同的语言加载,和直接用肉眼查看。
保存参数:
import json
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--seed', type=int, default=98, help='seed')
parser.add_argument('--epoch', type=int, default=100, help='epoch')
args = parser.parse_args()
with open('./test_arg.json', 'wt') as f:
json.dump(vars(args), f, indent=4). # indent意思就是json格式缩进4个space,便于肉眼查看
加载参数:
args = argparse.ArgumentParser()
args_dict = vars(args)
with open('./test_arg.json', 'rt') as f:
args_dict.update(json.load(f))
print(args.seed)
当然也可以用yaml或者pickle,本质就是argparse保存了一个dict,只要将保存和加载的对象用于更新这个dict即可。
深入了解下其他参数
-
类
argparse.``ArgumentParser( prog = None , usage = None , description = None , epilog = None , parents = [] , formatter_class = argparse.HelpFormatter , prefix_chars = '-' , fromfile_prefix_chars = None , argument_default = None , conflict_handler = 'error' , add_help =真,allow_abbrev =真, exit_on_error =真) -
创建一个新
ArgumentParser对象。所有参数都应作为关键字参数传递。每个参数在下面都有自己更详细的描述,但简而言之,它们是:- prog - 程序的名称(默认值
os.path.basename(sys.argv[0]):) - 用法- 描述程序用法的字符串(默认值:从添加到解析器的参数生成)
- description - 在参数帮助之前显示的文本(默认值:无)
- Epilog - 参数帮助后显示的文本(默认值:无)
- 父母
ArgumentParser-还应包括其参数的对象列表 - formatter_class - 用于自定义帮助输出的类
- prefix_chars - 可选参数前缀的字符集(默认值:'-')
- fromfile_prefix_chars - 应读取附加参数的文件前缀字符集(默认值
None:) - argument_default - 参数的全局默认值(默认值
None:) - conflict_handler - 解决冲突选项的策略(通常是不必要的)
- add_help - 向解析器添加一个
-h/--help选项(默认值True:) - allow_abbrev - 如果缩写明确,则允许缩写长选项。(默认
True:) - exit_on_error - 确定发生错误时 ArgumentParser 是否以错误信息退出。(默认
True:)
- prog - 程序的名称(默认值