ValueError: ('You cannot drop a non-broadcastable dimension.')
Verfasst: Mittwoch 12. April 2017, 10:43
Hallo zusammen,
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:
Was mache ich falsch?
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)))