主要用到的python工具:
前两个用于管理配置,最后一个用于管理日志。
argparse是命令行解析工具,分为四个步骤:
第2步创建了一个对象,第3步为这个对象添加参数。
第4步,解析parser对象,得到的是可以通过参数访问的对象。比如可以通过args.batch_size 得到batch size的参数值。
yaml是可读的数据序列化语言,常用于配置文件。
支持类型有:
# 支持数字,整形、floatpi3.14
# 支持布尔变量islisttrueisdictfalse
# 支持None cash~
# 时间日期采用ISO8601time12021-6-9 215943.10-0500
#强制转化类型int_to_str!!str 123bool_to_str!!str true
# 支持list123
# 复合list和dicttest2namexxx attr1sunny attr2rainy attr3cloudy语法特点:
安装:pip install pyyaml
示例:
nametosanage22skill name1coding time2yearsjobname2JD pay2kname3HW pay4k❗️关键字不能重复;不能使用tab,必须使用空格;缩进的空格数目不重要,只要相同层级的元素左对齐即可
处理的脚本:
import yaml
f = open("configs/test.yml", "r")
y = yaml.load(f)
print(y)输出结果:
YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details. y = yaml.load(f){'name': 'tosan', 'age': 22, 'skill': {'name1': 'coding', 'time': '2years'}, 'job': [{'name2': 'JD', 'pay': '2k'}, {'name3': 'HW', 'pay': '4k'}]}这个警告取消方法是:添加默认loader
y = yaml.load(f, Loader=yaml.FullLoader)保存:
content_dict = { 'name':"ch",}f = open("./config.yml","w")print(yaml.dump(content_dict, f))这个用得少,一般还是在yaml文件里敲代码写入。
# process argparse & yamlif args.config: # yaml priority is higher than args opt = vars(args) # Python内置函数vars()返回对象的__dict__属性 args = yaml.load(open(args.config), Loader=yaml.FullLoader) opt.update(args) # update()方法用于更新字典中的键/值对(修改已有或添加新的) args = argparse.Namespace(**opt)
或者if args.config: # args priority is higher than yaml opt = yaml.load(open(args.config), Loader=yaml.FullLoader) opt.update(vars(args)) args = argparse.Namespace(**opt)
[1] 如何高效管理深度学习实验?
[2] PyYAML官方文档