2015-02-06 56 views
4

以下顯然簡單的代碼用於Python中的MCMC會導致巨大的內存使用(> 15GB),即使我使用pickle後端。每當我在pymc中使用觀察變量數組時,都會發生這種情況。任何想法爲什麼發生這種情況?Python中使用pymc的內存溢出

import pymc as pymc 
import numpy as np 

N = 17 
numC = 5 

A = np.zeros([N,N]) 
A[0:numC, :] = 1 
A[:, 0:numC] = 1 

C = pymc.Beta('C', alpha=0.5, beta=0.5, size=N) 

@pymc.deterministic(dtype=float) 
def q(_C=C): 
    Q = np.zeros([N,N]) 
    for i in range(0,N-1): 
     for j in range(i+1, N): 
      Q[i, j] = Q[j, i] = C[i] + C[j] - C[i]*C[j] 

    return Q 

obs = [] 
for i in range(0,N-1): 
    for j in range(i+1, N): 
     o = pymc.Bernoulli('A%d%d'%(i,j), p=q[i,j], value=A[i,j], observed=True) 
     obs.append(o) 

model = pymc.Model([C, q] + obs) 

mcmc = pymc.MCMC(model, db='pickle', dbname='abc.pickle') 
mcmc.sample(10000, burn=5000, thin=5) 
mcmc.db.close() 
+0

我有類似的問題。我已在Github上發佈(因爲這似乎是尋求支持的最佳場所),但沒有任何運氣。你能解決這個問題嗎? – analystic 2015-03-24 02:54:13

+0

沒有機會。對不起 – ahmethungari 2015-03-24 18:28:17

+0

只需要說一句,在你的q函數中你命名了參數_C,然後使用C – 2015-05-15 11:50:01

回答

0
  1. 從個人的經驗,泡菜可以與大對象的內存非常脂肪,而且它通常膨脹並沒有增長,因爲我已經看到釋放內存。
  2. 可以嘗試使用memory profiler來檢查內存增長髮生的位置,它允許裝飾函數以一種方式查看在執行期間增長的內存的良好繪圖圖形。