Thank you. I think I'll change my implementation.

On Monday, February 27, 2017 at 5:20:09 PM UTC-8, Kiuhnm Mnhuik wrote:
>
> 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