【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.py
のoutput()
関数を呼び出して出力してみましょう.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