I believe the way it works is through operator overloading. In python you 
can change the behavior of operators. I could explain it more here but 
ThePythonGuru has a great write-up on how operator overloading works in 
Python: https://thepythonguru.com/python-operator-overloading/

The way it applies to Theano is that Theano tensors and symbolic variables 
can override the operators +, *, /, %, <, >, <=, >=, etc. by adding methods 
to their object that override/add the behavior you want. The corresponding 
methods look like, __add__, __mul__, __truediv__, __mod__, __lt__, etc. I'm 
sure it takes a few more tricks to make it work smoothly but I believe this 
is the main way that flexibility is implemented.

On Wednesday, October 3, 2018 at 5:09:33 PM UTC-4, DL_user wrote:
>
> Got another question that can't find guidelines from Theano document. 
> Consider these two cases:
>
> Case 1:
> a = T.dmatrix('a')
> b = T.dmatrix('b')
> c = T.dmatrix('c')
> y = T.pow(a,b)-c
> f = theano.function([a,b,c], y)
>
> f(np.reshape(np.ogrid[0:1:4j],(2,2)),np.reshape(np.ogrid[0:1:4j],(2,2)), 
> np.reshape(np.ogrid[0:1:4j],(2,2))).cumsum()
>
> Case 2:
> a = T.dmatrix('a')
> b = T.dmatrix('b')
> c = T.dmatrix('c')
> y = T.pow(a,b)-c
> f = theano.function([a,b,c], y.cumsum())
>
> f(np.reshape(np.ogrid[0:1:4j],(2,2)),np.reshape(np.ogrid[0:1:4j],(2,2)), 
> np.reshape(np.ogrid[0:1:4j],(2,2)))
>
> These two functions have the same output. So it seems theano.function() 
> can take any (???) Python built-in operators like cumsum()? What else 
> functions can be blended inside theano.function(), like ufunc or customized 
> functions?
>

-- 

--- 
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 theano-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to