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 [email protected].
For more options, visit https://groups.google.com/d/optout.