我正在使用openMDAO构建一个共克隆元模型,我想导出并导入另一个Python代码。保存元模型供将来使用
我在旧论坛(http://openmdao.org/forum/questions/444/how-can-i-save-the-metamodel-for-later-use?sort=votes)上发现了一条消息,其中有人使用泡菜来保存元模型。 我也读了关于记录器,但我没有成功地在我执行的不同测试。
有没有办法保存元模型并将其用于未来的代码?
编辑:我想我发现用“泡菜”的一种解决方案。我成功地用克里格元模型来做到这一点,但我认为我会和克里格一样工作。
就像在openMDAO'老'论坛上发表的文章中,我将训练有素的元模型保存在一个文件中,然后在另一个python脚本中重用。我在这里加入了代码保存训练的元模型的一部分:
cok = MultiFiCoKrigingSurrogate()
prob = Problem(Simulation(cok, nfi=2))
prob.setup(check=False)
prob['mm.train:x1'] = DATA_HF_dim
prob['mm.train:x1_fi2'] = DATA_LF_dim
prob['mm.train:y1'] = rastri_e
prob['mm.train:y1_fi2'] = rastri_c
prob.run()
import pickle
f = open('meta_model_info.p','wb')
pickle.dump(prob,f)
f.close
一旦训练的元模型保存在文件meta_model_info.p,我可以在另一个脚本加载它,跳过学习阶段。第二个脚本的代码的部分是在这里:
class Simulation(Group):
def __init__(self, surrogate, nfi):
super(Simulation, self).__init__()
self.surrogate = surrogate
mm = self.add("mm", MultiFiMetaModel(nfi=nfi))
mm.add_param('x1', val=0.)
mm.add_output('y1', val=(0.,0.), surrogate=surrogate)
cok = MultiFiCoKrigingSurrogate()
prob = Problem(Simulation(cok, nfi=2))
prob.setup(check=False)
import pickle
f = open('meta_model_info.p','rb')
clf = pickle.load(f)
pred_cok_clf = []
for x in inputs:
clf['mm.x1'] = x
clf.run()
pred_cok_clf.append(clf['mm.y1'])
pred_mu_clf = np.array([float(p[0]) for p in pred_cok_clf])
pred_sigma_clf = np.array([float(p[1]) for p in pred_cok_clf])
但是我不得不重新定义类问题的问题,并设置无论是在这第二个脚本。
我不知道这是否是一个正确使用的“泡菜”或是否有另一种方式做到这一点,如果你有任何建议:)