Shared vars must be updated through a theano function like in my example. 
It doesn't make sense to create a "symbolic shared variable".
If x is a tensor of an arbitrary order (ndim) then I think you'll need to 
instantiate different versions of your code for each type of tensor (1d, 
2d, 3d, ecc...).
Maybe you should rethink your approach to your problem. There must be an 
easier way.

On Monday, February 27, 2017 at 9:34:57 PM UTC+1, Asghar Inanlou Asl wrote:
>
> Thank you for your help. But I guess my question is creating a random 
> shared variable with the shape of a "tensor".
> something like:
>
> def generate_(x):
>      x_shape = x.shape
>      rng = RandomStreams()
>      random_tensor = rng.normal(x_shape)
> >> return theano.shared(random_tensor, dtype=floatX)
>
> But in line >> you cannot do it. Because theano.shared needs a value not 
> symbolic tensor.
>
> On Monday, February 27, 2017 at 4:27:57 AM UTC-8, Kiuhnm Mnhuik wrote:
>>
>> import theano
>> import theano.tensor as T
>> import numpy as np
>> from theano.sandbox.rng_mrg import MRG_RandomStreams as RandomStreams
>>
>> floatX = theano.config.floatX
>>
>> srng = RandomStreams()
>>
>> x = T.matrix()
>> random_shared = theano.shared(np.empty((0, 0), dtype=floatX))
>>
>> f = theano.function([x], updates=[(random_shared, srng.normal(x.shape))])
>>
>> print(random_shared.get_value())
>> f(np.ones((4, 5), dtype=floatX))
>> print(random_shared.get_value())
>>
>>
>> On Monday, February 27, 2017 at 9:47:12 AM UTC+1, Asghar Inanlou Asl 
>> wrote:
>>>
>>> Yes, but that does not create a shared variable.
>>>
>>> On Sunday, February 26, 2017 at 4:05:40 AM UTC-8, Kiuhnm Mnhuik wrote:
>>>>
>>>> You can generate random tensors in Theano:
>>>>
>>>>     from theano.sandbox.rng_mrg import MRG_RandomStreams as 
>>>> RandomStreams
>>>>
>>>>     srng = RandomStreams()       # change the seed if you want
>>>>
>>>>     .
>>>>     .
>>>>     .
>>>>
>>>>     R1 = srng.normal(shape)
>>>>     R2 = srng.normal(shape)
>>>>     .
>>>>     .
>>>>     .
>>>>
>>>>
>>>>
>>>> On Saturday, February 25, 2017 at 12:49:18 PM UTC+1, Asghar Inanlou Asl 
>>>> wrote:
>>>>>
>>>>> Hi all,
>>>>> I need to make a shared variable and randomly initialize it. 
>>>>> Obviously, the way to do it is to use numpy to generate a random matrix 
>>>>> and 
>>>>> then change it to shared variable via theano.shared()
>>>>> However, I cannot do it because the size of the random matrix is 
>>>>> partly coming from a TensorVariable so numpy gets stuck in it.
>>>>> To be particular, I have a function which multiplies the input tensor 
>>>>> in a random matrix (think about what a fully connected layer does). But 
>>>>> the 
>>>>> point is the shape of the tensor might be changing. And it needs to be a 
>>>>> shared variable to that I can use it as one of the parameters of my 
>>>>> updates.
>>>>> Any comments?
>>>>> 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.

Reply via email to