【Python】Python持続化パラメータ構成


プログラムの柔軟性を向上させるには、コードの構成可能なアイテムを単一のソースファイルに抽出して、統一的に変更して表示することをお勧めします.
"""
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