【Python】Python持久化参数配置

5 篇文章 0 订阅
3 篇文章 0 订阅

为了提高程序的灵活性,一种推荐的方式是将代码的可配置项抽出为单个源文件,以方便统一修改查看:

"""
config.py 配置文件
"""
NETWORK_SIZE = 200
DS_SIZE = [0.01, 10]
CAPACITY_RATIO = 5
CL_CL_DELAY_BASELINE = [2e-3, 100e-3]
DC_DC_DELAY_BASELINE = [5e-3, 50e-3]
CL_DC_DELAY_BASELINE = [10e-3, 200e-3]
# ......

但随着程序的反复修改,逐渐难以将当时保存的模型和匹配的配置一一对应,从而带来很多麻烦,一个自然的想法是将配置一起保存下来:

"""
config.py 配置文件
"""

NETWORK_SIZE = 200
DS_SIZE = [0.01, 10]
CAPACITY_RATIO = 5
CL_CL_DELAY_BASELINE = [2e-3, 100e-3]
DC_DC_DELAY_BASELINE = [5e-3, 50e-3]
CL_DC_DELAY_BASELINE = [10e-3, 200e-3]
# ......
# 以上是模型配置

def state_dict():
    """返回config字典"""
    import config
    from inspect import isfunction, ismodule
    state = {}
    vrb_names = dir(config)
    for vrbName in vrb_names:
        if vrbName.startswith('__') and vrbName.endswith('__'):
            continue
        vrb = getattr(config, vrbName)
        if isfunction(vrb) or ismodule(vrb):
            continue
        state[vrbName] = vrb
    return state


def load(state_dict):
    """加载config字典"""
    import config
    for vrbName in state_dict:
        setattr(config, vrbName, state_dict[vrbName])
    print('config loaded')


def output():
    """打印参数字典"""
    stat = state_dict()
    for vrb_name in stat:
        print(vrb_name + ' = ' + str(stat[vrb_name]))


if __name__ == '__main__':
    output()

这样所有在配置文件中定义的配置变量均可以读取为字典:

import config as cfg

dic = cfg.state_dict()

print(dic)
# 输出:
# {'CAPACITY_RATIO': 5, 'CL_CL_DELAY_BASELINE': [0.002, 0.1], 'CL_DC_DELAY_BASELINE': [0.01, 0.2], 'DC_DC_DELAY_BASELINE': [0.005, 0.05], 'DS_SIZE': [0.01, 10], 'NETWORK_SIZE': 200}

然后就可以使用持久化方法进行存取,如 np.savez_compressed()np.load() ,还可以将 cfg.state_dict() 赋值给Model的成员变量,对整个Model对象存取的同时也存取了配置。

最后可以在需要时将配置进行还原:

import config as cfg

cfg.load(model.cfg_dict)

之后我们看下是否将配置恢复回来了,调用 config.pyoutput() 函数输出一下看看:

cfg.output()

# 输出:
# CAPACITY_RATIO = 5
# CL_CL_DELAY_BASELINE = [0.002, 0.1]
# CL_DC_DELAY_BASELINE = [0.01, 0.2]
# DC_DC_DELAY_BASELINE = [0.005, 0.05]
# DS_SIZE = [0.01, 10]
# NETWORK_SIZE = 200
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值