ValueError: ('You cannot drop a non-broadcastable dimension.')

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Romaxx
User
Beiträge: 62
Registriert: Donnerstag 26. Januar 2017, 18:53

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:

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)))
Was mache ich falsch?
Antworten