2015-02-06 10 views
4

По-видимому, простой код для MCMC в Python вызывает огромное использование памяти (> 15 ГБ), хотя я использую брандмауэр. Это происходит всякий раз, когда я использую массивы наблюдаемых переменных в 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

+0

Нет шансов. Извините – ahmethungari

+0

Просто замечание, в вашей функции q вы назвали параметр _C, но затем используйте C –

ответ

0
  1. из личного опыта, рассол может быть чрезвычайно жира в памяти с большими объектами, и это, как правило, надувается и растет, не выпуская память, как я видел.
  2. может попытаться использовать memory profiler, чтобы проверить, где происходит рост памяти, он позволяет украшать функции, чтобы увидеть хороший график графика памяти, растущий во время их выполнения.