2017-08-28 4 views
1

私は同じpymc3モデルを使用して、多くの(〜100)データセットに適合させようとしています。モデルを再利用する方法が見つからなかったので、新しいモデルを作成します。多くのデータセットを持つ同じモデルをサンプル

for i in range(100): 
    Y = data[i] 
    mod = pm.Model() 
    with mod: 
    p = pm.Uniform('p',lower=0.1,upper=3 ,testval=2) 
    Y_obs = pm.Binomial('Y_obs',n=100,p=z,observed=Y) 
    err = 1 
    try: 
     trace = pm.sample(5000) 
     err = 0 
     result.append(trace) 
    del mod 
    if err == 0: 
    del trace 

この方法プロセスは時間をかけて遅くなり、最も可能性の高いスローダウンの原因となるフル思えるまで、私のRAM使用量の継ぎ目が増加すると:これは基本的なコードです。

異なるモデルに同じモデルを適合させるより良い方法はありますか?

答えて

0
それはあなたのコードとのトラブルのほとんどのように見える

ある関連のpython - あなたは関数から、それを返すことによって、モデルを再利用することができます

def my_model(y_obs): 
    with pm.Model() as model: 
     p = pm.Uniform('p', lower=0.1, upper=3, testval=2) 
     pm.Binomial('Y_obs', n=100, p=p, observed=Y) 
    return model 

は、その後、あなたのデータを反復処理することができます

result = [] 
for y_obs in data: 
    with my_model(y_obs): 
     result.append(pm.sample(5000)) 

メモリの問題を診断するには、データがどのように見えるかを知る必要があります。一度にすべてをサンプリングしてみてください。

with pm.Model() as model: 
    p = pm.Uniform('p', lower=0.1, upper=3, shape=len(data)) 
    pm.Binomial('Y_obs', n=100, p=p, observed=data) 
    trace = pm.sample(5000) 

これは高速化するはずですが、メモリにはあまり役立ちません。

関連する問題