主要用到的python工具:
前两个用于管理配置,最后一个用于管理日志。
argparse是命令行解析工具,分为四个步骤:
第2步创建了一个对象,第3步为这个对象添加参数。
第4步,解析parser对象,得到的是可以通过参数访问的对象。比如可以通过args.batch_size
得到batch size的参数值。
yaml是可读的数据序列化语言,常用于配置文件。
支持类型有:
# 支持数字,整形、float
pi3.14
# 支持布尔变量
islisttrue
isdictfalse
# 支持None
cash ~
# 时间日期采用ISO8601
time1 2021-6-9 21 59 43.10-0500
#强制转化类型
int_to_str !!str 123
bool_to_str !!str true
# 支持list
1
2
3
# 复合list和dict
test2
name xxx
attr1 sunny
attr2 rainy
attr3 cloudy
语法特点:
安装:pip install pyyaml
示例:
name tosan
age22
skill
name1 coding
time 2years
job
name2 JD
pay 2k
name3 HW
pay 4k
❗️关键字不能重复;不能使用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 & yaml
if 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官方文档