Thank you very much for your help

Arnaud Bergeron <[email protected]> 於 2018年12月11日 週二 上午1:42寫道:

> The only option with Theano would be to write your own op that would run
> in parallel on the GPU.
>
> This is not an easy task.
>
> Le 10 déc. 2018 à 07:35, Wong Hang <[email protected]> a écrit :
>
> 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.
>
>
> --
>
> ---
> 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.
>

-- 

--- 
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.

Reply via email to