在pymc3模型中使用theano.scan

时间:2016-08-17 02:58:13

标签: theano pymc pymc3 theano.scan

我试图使用pymc3推断随机动力系统的参数。我有一个似乎没有错误的theano表达,但我似乎无法编译它,我希望这样做以生成适合的玩具数据。我的模特是

  

dx / dt = ax(t) - x(t)^ 3 + epsilon(即epsilon是一些状态噪声)

     

epsilon~Normal(0,sigma ^ 2)

计划是在pymc3中设置先前分布的epsilonsigmaa,并使用theano.scan来积分微分方程。然后我需要生成一些数据,我想通过将scan的输出编译成python函数可以做到这一点,我将使用sigmaa和{的固定值运行{1}}。到目前为止我在这里:

x(0)

最后一行给了我

  

MissingInputError:("图表的输入,用于计算{cpu,scan_fn}(Elemwise {Cast {int32}}。0,IncSubtensor {Set;:int64:}。0,sigma,a ,dt,epsilon),未提供且未给出值。使用Theano标志exception_verbosity =' high',有关此错误的更多信息。",epsilon)

(详细标志无效)。

我不确定的一件事是pymc3随机变量在import theano.tensor as T import theano import pymc3 as mc with mc.Model() as model: # Time-related variables for performing the integration dt = T.fscalar('dt') tau = T.fscalar('tau') steps = T.cast(tau / dt, 'int32') x = mc.Uniform('x', lower=-10, upper=10) a = mc.Gamma('a', 1, 1) sigma = mc.Gamma('sigma', mu=1, sd=1) epsilon = mc.Normal('epsilon', mu=0, sd=sig_s) # Symbolic loop through Euler updates xout, updates = theano.scan(fn=lambda x, sigma, a, dt: x + dt * (a * x - x**3) + T.sqrt(dt) * epsilon, outputs_info=x, non_sequences=[sigma, a, dt], n_steps=steps) simulation = theano.function(inputs=[x, sigma, a, dt, tau], outputs=xout, updates=updates, allow_input_downcast=True) 内是如何工作的。如果我为scan提供值,sigma会在循环的每次迭代中绘制一个新的随机值吗?我需要给epsilon一个大小吗?

0 个答案:

没有答案