PyMC3简单主题模型

时间:2016-09-12 23:43:45

标签: pymc pymc3

我正在尝试在PyMC3中实现一个非常简单的主题模型,并且我在使用它进行采样时遇到了问题。我很确定问题在'p'函数中我是如何尝试访问'theta'变量的。 Theta不是真正的列表,但我不知道如何结合这些信息。任何帮助将不胜感激。

import numpy as np
from pymc3 import *
import theano.tensor as t

K = 3 #NUMBER OF TOPICS
V = 20 #NUMBER OF WORDS
N = 15 #NUMBER OF DOCUMENTS


#GENERAETE RANDOM CATEGORICAL MIXTURES
data = np.ones([N,V])

@theano.compile.ops.as_op(itypes=[t.dmatrix, t.lscalar],otypes=[t.dvector])
def p(theta, z_i):
    return theta[z_i]


model = Model()
with model:

    alpha = np.ones(V)
    beta = np.ones(K)

    theta = Dirichlet('theta', alpha, shape=(K,V))
    phi = Dirichlet('phi', beta, shape=K)

    z = [Categorical('z_%i' % i, phi) for i in range(N)]

    x = [Categorical('x_%i' % (i), p=p(theta,z[i]), observed=data[i]) for i in range(N)]

    print "Created model.  Now begin sampling"
    step = Metropolis()
    trace = sample(10000, step)

    trace.get_values('phi')

我在上面的代码中得到的错误信息是:

  

TypeError:期望的type_num 9(NPY_INT64)得到7应用节点   导致错误:ScalarFromTensor(InplaceDimShuffle {}。0)Toposort   index:11输入类型:[TensorType(int64,scalar)]输入形状:   [()]输入步幅:[()]输入值:[array(1)]输出客户端:   [[Subtensor {int64}(Elemwise {TrueDiv} [(0,0)]。0,ScalarFromTensor.0)]]

0 个答案:

没有答案