Thanks for your post. I need this scan loop for calculating my functions values in a less memory intensive way and where the loops are independent for perhaps later parallelizing. I know that this kind of example is still recurrent because of the addition of EPhiTPhi. To fix this is not the problem I think, but before this I need to do this special calculation, were I pick the rows of SIGMA_trf too make this special calculation where i have to blow up Sigma_trf. Thanks for you time either.
Am Dienstag, 18. April 2017 23:05:26 UTC+2 schrieb Triet Chau: > > If calculating the gradient was your goal, I recommend checking out the > grad function, > http://deeplearning.net/software/theano/tutorial/gradients.html > > On Tuesday, 18 April 2017 22:26:24 UTC+2, [email protected] wrote: >> >> Back to the topic: >> Even when I squeeze SIGMA_trf before blowing it up to SIGMA_trf[None, >> None, :] I get this error. I would expect that after squeezing SIGMA_trf >> I would have a object like (,D). Whats wrong with this assumption? Can >> anyone help? >> >> Am Dienstag, 18. April 2017 22:19:32 UTC+2 schrieb >> [email protected]: >>> >>> More or less yes. But the other post was more about using scan in >>> general, now its a special issue I have. >>> >>> Am Montag, 17. April 2017 14:18:39 UTC+2 schrieb Triet Chau: >>>> >>>> Hi, does your code still serve the same purpose as that from your >>>> previous post ( >>>> https://groups.google.com/forum/#!topic/theano-users/gSZLwu8UrO0)? >>>> >>>> On Wednesday, 12 April 2017 13:04:30 UTC+2, [email protected] >>>> wrote: >>>>> >>>>> 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.
