Hello,

I try to loop with the scan function from theano.
I have a working example:


   1. import numpy as np
   2. import theano
   3. import theano.tensor as T 
   4.  
   5. N = 100
   6. M = 50
   7. D = 2
   8. EPhiTPhi = np.zeros((M,M))
   9. Z_n_W = T.dtensor3("Z_n_W")   
   10. MU_S_hat_minus = T.dtensor3("MU_S_hat_minus") 
   11.              
   12. def EPhiTPhi_loop(EPhiTPhi, Z_n_W, MU_S_hat_minus):
   13.    EPhiTPhi = EPhiTPhi + Z_n_W * (T.exp(-0.5 * (MU_S_hat_minus**2).
   sum(2)));  
   14.    return EPhiTPhi
   15. 
   16. EPhiTPhi_out, _ = theano.scan(EPhiTPhi_loop,
   17.                        outputs_info = EPhiTPhi,
   18.                        sequences = [Z_n_W],
   19.                        non_sequences = [MU_S_hat_minus])
   20. 
   21. OUT = theano.function(inputs=[Z_n_W, MU_S_hat_minus], outputs = 
   EPhiTPhi_out)
   22. 
   23.  
   24. Z_n_W = np.ones((N,M,M))     
   25. MU_S_hat_minus = np.zeros((M,M,D))    
   26. #EPhiTPhi = EPhiTPhi.astype(np.float32)
   27. #Z_n_W = Z_n_W.astype(np.float32)
   28. #MU_S_hat_minus = MU_S_hat_minus.astype(np.float32)
   29. 
   30. LIST = {'Z_n_W': Z_n_W, 'MU_S_hat_minus': MU_S_hat_minus}
   31. 
   32. TEST = OUT(**LIST)
   

When I try to extend it with one additional sequence variable of size 
(N,D), SIGMA_trf, I expect to hand over to EPhiTPhi_loop a vector with 
size(1,D).
When i want to make a calculation, where i have to blow up this vector to 
SIGMA_trf[None, None, :], I get an error.
Her first the extenden code.


   1. import numpy as np
   2. import theano
   3. import theano.tensor as T 
   4.  
   5. N = 100
   6. M = 50
   7. D = 2
   8. EPhiTPhi = np.zeros((M,M))
   9. SIGMA_trf = T.dmatrix("SIGMA_trf")  
   10. Z_n_W = T.dtensor3("Z_n_W")   
   11. MU_S_hat_minus = T.dtensor3("MU_S_hat_minus") 
   12. 
   13.              
   14. def EPhiTPhi_loop(EPhiTPhi, SIGMA_trf, Z_n_W, MU_S_hat_minus):
   15.    EPhiTPhi = EPhiTPhi + Z_n_W * (T.exp(-0.5 * (MU_S_hat_minus**2 * 
   SIGMA_trf[None, None, :]).sum(2)));  
   16.    return EPhiTPhi
   17. 
   18. EPhiTPhi_out, _ = theano.scan(EPhiTPhi_loop,
   19.                        outputs_info = EPhiTPhi,
   20.                        sequences = [SIGMA_trf, Z_n_W],
   21.                        non_sequences = [MU_S_hat_minus])
   22. 
   23. OUT = theano.function(inputs=[SIGMA_trf, Z_n_W, MU_S_hat_minus], 
   outputs = EPhiTPhi_out)
   24. 
   25. SIGMA_trf = np.zeros((N,D))    
   26. Z_n_W = np.ones((N,M,M))     
   27. MU_S_hat_minus = np.zeros((M,M,D))    
   28. #EPhiTPhi = EPhiTPhi.astype(np.float32)
   29. #Z_n_W = Z_n_W.astype(np.float32)
   30. #MU_S_hat_minus = MU_S_hat_minus.astype(np.float32)
   31. 
   
   32.  
   33. LIST = {'SIGMA_trf': SIGMA_trf, 'Z_n_W': Z_n_W, 'MU_S_hat_minus': 
   MU_S_hat_minus}
   34. 
   35. TEST = OUT(**LIST)
   

The error is:

Traceback (most recent call last):

  File "<ipython-input-1-dd8e5b5e726c>", line 22, in <module>
    non_sequences = [MU_S_hat_minus])

  File 
"C:\ProgramData\Anaconda3\lib\site-packages\theano\scan_module\scan.py", 
line 773, in scan
    condition, outputs, updates = scan_utils.get_updates_and_outputs(fn(*
args))

  File "<ipython-input-1-dd8e5b5e726c>", line 15, in EPhiTPhi_loop
    EPhiTPhi = EPhiTPhi + Z_n_W * (T.exp(-0.5 * (MU_S_hat_minus**2 * 
SIGMA_trf[None, None, :]).sum(2)));

  File "C:\ProgramData\Anaconda3\lib\site-packages\theano\tensor\var.py", 
line 560, in __getitem__
    view = self.dimshuffle(pattern)

  File "C:\ProgramData\Anaconda3\lib\site-packages\theano\tensor\var.py", 
line 355, in dimshuffle
    pattern)

  File 
"C:\ProgramData\Anaconda3\lib\site-packages\theano\tensor\elemwise.py", 
line 177, in __init__
    (input_broadcastable, new_order))

ValueError: ('You cannot drop a non-broadcastable dimension.', ((False, 
False), ('x', 'x', 0)))


Thanks for your help.

-- 

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