保存元模型以备将来使用

Posted

技术标签:

【中文标题】保存元模型以备将来使用【英文标题】:Save a meta-model for future use 【发布时间】:2017-05-31 09:12:36 【问题描述】:

我正在使用 openMDAO 构建一个联合克里金元模型,我想将其导出然后导入另一个 python 代码。

我在旧论坛 (http://openmdao.org/forum/questions/444/how-can-i-save-the-metamodel-for-later-use?sort=votes) 上发现有人使用 pickle 保存元模型的消息。 我还阅读了有关记录器的信息,但是我在执行的不同测试中都没有成功。

有没有办法保存元模型并在以后的代码中使用它?


编辑:我想我找到了一种使用“泡菜”的解决方案。我成功地使用克里金元模型做到了这一点,但我认为我会使用联合克里金法进行同样的工作。

就像在 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])

但是我不得不重新定义问题的类别并在第二个脚本中设置问题。

如果您有任何建议,我不知道是否正确使用“pickle”或者是否有其他方法可以做到这一点:)

【问题讨论】:

【参考方案1】:

目前没有任何关于保存和重新加载代理模型的规定。你有两个选择: 1) 保存训练数据,然后在您的其他脚本中导入并重新训练模型。您可以为此直接调用代理模型的fitpredict 方法,方法是从库中导入它们。

2)如果你想跳过每次重新训练的成本,那么你需要修改代理模型本身以保存拟合过程的结果,然后再将其重新加载到新的实例中:@ 987654321@

【讨论】:

以上是关于保存元模型以备将来使用的主要内容,如果未能解决你的问题,请参考以下文章

保存卡以备将来付款时使用 Stripe 3D Secure

从图库中选择图像并保存以备将来使用

如何使用 PayPal REST API 和 PayPal PHP SDK 保存 PayPal 帐户以备将来付款

应用程序功能要求保存信用卡详细信息以备将来使用。需要调查是不是存在任何特定的安全设计

html 您是否经常将Flash文件嵌入到html页面中?如果是,您最好保存下面的有效Flash嵌入代码以备将来使用。

Scala、Apache Spark编写的编译错误保存模型