Hi,
I am working on a problem that is similar to this one:
import theano
import theano.tensor as T
import theano.tensor.slinalg as Tla
cholesky=Tla.cholesky
solve_lower_triangular=Tla.solve_lower_triangular
import numpy as np
def _LL(k,ret,data,mu,sigma):
jitter = 1e-6*T.eye(3)
L = cholesky(sigma + jitter)
err = data[k] - mu
Lerr = solve_lower_triangular(L,err)
LL = -0.5*1.83787706640934533908e+00
LL -= T.sum(T.log(T.diag(L)))
LL -= 0.5*T.sum(T.sqr(Lerr))
return ret + LL
def compile(N):
sigma = np.array([
[1.0,0.5,-0.3],
[0.5,2.0,0.],
[-0.3,0.,1.5],
],dtype=np.float64)
mu = np.array([
-2.0,
1.0,
-4.0,
],dtype=np.float64)
data = np.random.multivariate_normal(mu,sigma,size=(N,),check_valid=
'raise')
data = theano.shared(data)
mu = theano.shared(np.zeros((3,)))
sigma = theano.shared(np.eye((3)))
result,updates = theano.scan(fn=_LL,
outputs_info=np.float64(0.),
sequences=np.arange(N),
non_sequences=[data,mu,sigma])
params = [mu,sigma]
g = T.grad(-result[-1],params)
f = theano.function(inputs=[],
outputs=g,
updates=updates)
return f
if __name__ == "__main__":
np.random.seed(12345)
N = 100
score = compile(N)
print(score())
But the difference is, each data block is of different dimensional
multivariate normal distribution and the mean / covariance is further
parameterized by something else (but same for each data block)
I did some research and acknowledged theano.scan run sequentially.
Are there any other way to write the same code to run in parallel on GPU?
Thanks.
--
---
You received this message because you are subscribed to the Google Groups
"theano-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.