ich möchte eine iteration mit der scan function von theano machen.
Dazu habe ich mit einem kleinen Beispiel angefangen und möchte dieses stückweise erweitern.
Dieses Beispiel funktioniert fehlerfrei:
[codebox=python file=Unbenannt.txt]import numpy as np
import theano
import theano.tensor as T
N = 100
M = 50
D = 2
EPhiTPhi = np.zeros((M,M))
Z_n_W = T.dtensor3("Z_n_W")
MU_S_hat_minus = T.dtensor3("MU_S_hat_minus")
def EPhiTPhi_loop(EPhiTPhi, Z_n_W, MU_S_hat_minus):
EPhiTPhi = EPhiTPhi + Z_n_W * (T.exp(-0.5 * (MU_S_hat_minus**2).sum(2)));
return EPhiTPhi
EPhiTPhi_out, _ = theano.scan(EPhiTPhi_loop,
outputs_info = EPhiTPhi,
sequences = [Z_n_W],
non_sequences = [MU_S_hat_minus])
OUT = theano.function(inputs=[Z_n_W, MU_S_hat_minus], outputs = EPhiTPhi_out)
Z_n_W = np.ones((N,M,M))
MU_S_hat_minus = np.zeros((M,M,D))
#EPhiTPhi = EPhiTPhi.astype(np.float32)
#Z_n_W = Z_n_W.astype(np.float32)
#MU_S_hat_minus = MU_S_hat_minus.astype(np.float32)
LIST = {'Z_n_W': Z_n_W, 'MU_S_hat_minus': MU_S_hat_minus}
TEST = OUT(**LIST)[/code]
für eine Erweiterung mit einer Variable SIGMA_trf klappt es dann nicht mehr:
[codebox=python file=Unbenannt.txt][codebox=python file=Unbenannt.txt]import numpy as np
import theano
import theano.tensor as T
N = 100
M = 50
D = 2
EPhiTPhi = np.zeros((M,M))
SIGMA_trf = T.dmatrix("SIGMA_trf")
Z_n_W = T.dtensor3("Z_n_W")
MU_S_hat_minus = T.dtensor3("MU_S_hat_minus")
MU_S_hat_plus = T.dtensor3("MU_S_hat_plus")
def EPhiTPhi_loop(EPhiTPhi, SIGMA_trf, Z_n_W, MU_S_hat_minus):
EPhiTPhi = EPhiTPhi + Z_n_W * (T.exp(-0.5 * (MU_S_hat_minus**2 * SIGMA_trf[None, None, :]).sum(2)));
return EPhiTPhi
EPhiTPhi_out, _ = theano.scan(EPhiTPhi_loop,
outputs_info = EPhiTPhi,
sequences = [SIGMA_trf, Z_n_W],
non_sequences = [MU_S_hat_minus])
OUT = theano.function(inputs=[SIGMA_trf, Z_n_W, MU_S_hat_minus], outputs = EPhiTPhi_out)
SIGMA_trf = np.zeros((N,D))
Z_n_W = np.ones((N,M,M))
MU_S_hat_minus = np.zeros((M,M,D))
MU_S_hat_plus = np.zeros((M,M,D))
#EPhiTPhi = EPhiTPhi.astype(np.float32)
#Z_n_W = Z_n_W.astype(np.float32)
#MU_S_hat_minus = MU_S_hat_minus.astype(np.float32)
#MU_S_hat_plus = MU_S_hat_plus.astype(np.float32)
LIST = {'SIGMA_trf': SIGMA_trf, 'Z_n_W': Z_n_W, 'MU_S_hat_minus': MU_S_hat_minus}
TEST = OUT(**LIST)[/code]
Ich erhalte diesen fehler:
Code: Alles auswählen
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)))