2017-05-31 17 views
2

openMDAOを使用して、エクスポートして別のPythonコードでインポートする共同クリギングメタモデルを構築しています。将来の使用のためにメタモデルを保存する

私は古いフォーラム(http://openmdao.org/forum/questions/444/how-can-i-save-the-metamodel-for-later-use?sort=votes)に、誰かがメタモデルを保存するためにピクルスを使用したというメッセージを発見しました。 私はレコーダーについても読んだことがありますが、私が行ったさまざまなテストでは成功しませんでした。

メタモデルを保存して今後のコードで使用する方法はありますか?


EDIT:私は 'ピクルス' を用いて溶液のようなものを見つけたと思います。私はクリギング・メタ・モデルを使ってこれを行うことに成功しましたが、私は共同クリギングで同じことをすると思います。

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に保存されると、私は学習フェーズをスキップし、別のスクリプトでそれを読み込むことができます。 2番目のスクリプトのコードの一部はここにある:

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]) 

私はこの2番目のスクリプトのいずれかで問題が問題のとセットアップにクラスを再定義することを余儀なくされたが。

それは「漬物」の適切な使用であるか、これを行うための別の方法がある場合、あなたはどんな提案:)

答えて

0

を持っている場合、保存および再ロードのためのいずれかの条項が現在存在しない場合、私は知りません代理モデル2つの選択肢があります: 1)トレーニングデータを保存しておき、他のスクリプトでモデルをインポートして再トレーニングします。このため代理モデルのfitpredictメソッドをライブラリから直接インポートすることで呼び出すことができます。

2)毎回再トレーニングのコストをスキップしたい場合、フィッティングプロセスの結果を保存するために代理モデル自体を変更し、後で新しいインスタンスに再ロードする必要があります。 https://github.com/OpenMDAO/OpenMDAO/blob/c69e00f6f9eeb617863e782246e2e7ed1fe9e019/openmdao/surrogate_models/multifi_cokriging.py#L322

関連する問題