Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleClas
提交
9c61fdd9
P
PaddleClas
项目概览
PaddlePaddle
/
PaddleClas
大约 1 年 前同步成功
通知
115
Star
4999
Fork
1114
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
19
列表
看板
标记
里程碑
合并请求
6
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleClas
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
19
Issue
19
列表
看板
标记
里程碑
合并请求
6
合并请求
6
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
9c61fdd9
编写于
4月 20, 2020
作者:
S
shippingwang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix
上级
8a85f447
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
38 addition
and
48 deletion
+38
-48
ppcls/utils/config.py
ppcls/utils/config.py
+38
-48
未找到文件。
ppcls/utils/config.py
浏览文件 @
9c61fdd9
...
...
@@ -14,13 +14,12 @@
import
os
import
yaml
from
ppcls.utils
import
check
from
ppcls.utils
import
logger
__all__
=
[
'get_config'
]
CONFIG_SECS
=
[
'ARCHITECTURE'
,
'TRAIN'
,
'VALID'
,
'OPTIMIZER'
,
'LEARNING_RATE'
]
class
AttrDict
(
dict
):
def
__getattr__
(
self
,
key
):
...
...
@@ -47,13 +46,12 @@ def create_attr_dict(yaml_config):
create_attr_dict
(
yaml_config
[
key
])
else
:
yaml_config
[
key
]
=
value
return
def
parse_config
(
cfg_file
):
"""Load a config file into AttrDict"""
with
open
(
cfg_file
,
'r'
)
as
fopen
:
yaml_config
=
AttrDict
(
yaml
.
load
(
fopen
,
Loader
=
yaml
.
Full
Loader
))
yaml_config
=
AttrDict
(
yaml
.
load
(
fopen
,
Loader
=
yaml
.
Safe
Loader
))
create_attr_dict
(
yaml_config
)
return
yaml_config
...
...
@@ -63,14 +61,8 @@ def print_dict(d, delimiter=0):
Recursively visualize a dict and
indenting acrrording by the relationship of keys.
"""
dk
=
[]
dv
=
[]
for
k
,
v
in
d
.
items
():
if
k
in
CONFIG_SECS
:
logger
.
info
(
"-"
*
60
)
placeholder
=
"-"
*
60
for
k
,
v
in
sorted
(
d
.
items
()):
if
isinstance
(
v
,
dict
):
logger
.
info
(
"{}{} : "
.
format
(
delimiter
*
" "
,
k
))
print_dict
(
v
,
delimiter
+
4
)
...
...
@@ -79,16 +71,11 @@ def print_dict(d, delimiter=0):
for
value
in
v
:
print_dict
(
value
,
delimiter
+
4
)
else
:
dk
.
append
(
k
)
dv
.
append
(
v
)
if
k
in
CONFIG_SECS
:
logger
.
info
(
"-"
*
60
)
for
ki
,
vi
in
zip
(
dk
,
dv
):
logger
.
info
(
"{}{} : {}"
.
format
(
delimiter
*
" "
,
k
,
v
))
logger
.
info
(
"{}{} : {}"
.
format
(
delimiter
*
" "
,
ki
,
vi
))
if
k
.
isupper
():
logger
.
info
(
placeholder
)
def
print_config
(
config
):
"""
...
...
@@ -97,18 +84,22 @@ def print_config(config):
Arguments:
config: configs
"""
copyright
=
"PaddleClas is powered by PaddlePaddle"
ad
=
"https://github.com/PaddlePaddle/PaddleClas"
logger
.
info
(
"
\n
"
*
2
)
logger
.
info
(
copyright
)
logger
.
info
(
ad
)
copyright
=
"PaddleClas is powered by PaddlePaddle !"
info
=
"For more info please go to the following website."
website
=
"https://github.com/PaddlePaddle/PaddleClas"
AD_LEN
=
55
logger
.
info
(
"
\n
{0}
\n
{1}
\n
{2}
\n
{3}
\n
{4}
\n
{5}
\n
{6}
\n
{7}
\n
"
.
format
(
"="
*
(
AD_LEN
+
4
),
"=={}=="
.
format
(
copyright
.
center
(
AD_LEN
)),
"="
*
(
AD_LEN
+
4
),
"=={}=="
.
format
(
' '
*
AD_LEN
),
"=={}=="
.
format
(
info
.
center
(
AD_LEN
)),
"=={}=="
.
format
(
' '
*
AD_LEN
),
"=={}=="
.
format
(
website
.
center
(
AD_LEN
)),
"="
*
(
AD_LEN
+
4
),
))
print_dict
(
config
)
logger
.
info
(
"-"
*
60
)
def
check_config
(
config
):
"""
...
...
@@ -166,7 +157,7 @@ def override(dl, ks, v):
override
(
dl
[
ks
[
0
]],
ks
[
1
:],
v
)
def
override_config
(
config
,
options
=
[]
):
def
override_config
(
config
,
options
=
None
):
"""
Recursively override the config
...
...
@@ -181,32 +172,31 @@ def override_config(config, options=[]):
Returns:
config(dict): replaced config
"""
for
opt
in
options
:
assert
isinstance
(
opt
,
str
),
\
(
"option({}) should be a str"
.
format
(
opt
))
assert
"="
in
opt
,
(
"option({}) should contain "
\
"a = to distinguish between key and value"
.
format
(
opt
))
pair
=
opt
.
split
(
'='
)
assert
len
(
pair
)
==
2
,
(
"there can be only a = in the option"
)
key
,
value
=
pair
keys
=
key
.
split
(
'.'
)
override
(
config
,
keys
,
value
)
if
options
is
not
None
:
for
opt
in
options
:
assert
isinstance
(
opt
,
str
),
(
"option({}) should be a str"
.
format
(
opt
))
assert
"="
in
opt
,
(
"option({}) should contain a ="
"to distinguish between key and value"
.
format
(
opt
))
pair
=
opt
.
split
(
'='
)
assert
len
(
pair
)
==
2
,
(
"there can be only a = in the option"
)
key
,
value
=
pair
keys
=
key
.
split
(
'.'
)
override
(
config
,
keys
,
value
)
return
config
def
get_config
(
fname
,
overrides
=
[]
,
show
=
True
):
def
get_config
(
fname
,
overrides
=
None
,
show
=
True
):
"""
Read config from file
"""
assert
os
.
path
.
exists
(
fname
),
\
(
'config file({}) is not exist'
.
format
(
fname
))
assert
os
.
path
.
exists
(
fname
),
(
'config file({}) is not exist'
.
format
(
fname
))
config
=
parse_config
(
fname
)
override_config
(
config
,
overrides
)
if
show
:
print_config
(
config
)
if
len
(
overrides
)
>
0
:
override_config
(
config
,
overrides
)
if
show
:
print_config
(
config
)
check_config
(
config
)
return
config
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录