2016-08-05 26 views
1

Ich habe zwei Matrizen zu multiplizieren. Eine ist Gewichtsmatrix - W, deren Größe 900x2x2 ist. Eine andere ist Eingangsmatrix-I, deren Größe 2x2 ist. Jetzt möchte ich Summierung über c = WI auszuführen, die 900x1 Matrix sein, aber wenn ich die Operation durchführen multipliziert sie und gibt mir 900x2x2 wieder Matrix.Multiplizieren 3D-Matrix mit 2D-Matrix

Q 2) (bezogen) So habe ich beide 2D und multipliziert 900x4 * 4x1 aber das gibt mir eine Fehlermeldung,

ValueError:operands could not be broadcast together with shapes (900,4) (4,1)

+0

Ich bin schwer zu verstehen, wie Sie eine 900x1 von einem 900x2x2 und einem 2x2 bekommen. Fehle ich etwas? Welches ist "W" und welches ist "I"? Was ist die Domäne der Anwendung (das könnte helfen)? – polarise

+0

Es ist die Summe von 2x2 * 2x2 für 900 Gewichte. Gerade bearbeitet. Sie hätten es besser verstanden, wenn Sie ANN implementiert hätten. – Hima

Antwort

2

Es scheint, dass Sie versuchen, die letzten beiden Achsen des ersten zu verlieren Array gegen die beiden einzigen Achsen des zweiten Gewichtsfeldes mit dieser Matrixmultiplikation. Wir konnten diese Idee in NumPy Code mit np.tensordot übersetzen bzw. arr1 und arr2 als die Eingabefelder unter der Annahme, wie so -

np.tensordot(arr1,arr2,axes=([1,2],[0,1])) 

Einen weiteren einfachen Weg in NumPy Code setzen mit np.einsum sein würde, wie so -

np.einsum('ijk,jk',arr1,arr2) 
+0

Okey! Aber im Allgemeinen, wenn wir 'MxN * NxK 'multiplizieren, sollte es' MxK 'richtig geben. Aber numpy scheint standardmäßig ein Punktprodukt zu geben, wenn ich versuche, 'MxN * 1xN' zu multiplizieren. Also technisch ist nichts falsch in Q2) es gibt immer noch einen Fehler. Warum ? – Hima

+1

@Hima Nun in NumPy, wenn man mit NumPy-Arrays arbeitet, bedeutet '*' elementweise Multiplikation und 'np.dot/np.tensordot' wird verwendet, um Matrix-Multiplikation durchzuführen, wenn das klarstellt? – Divakar

+0

ja tut es. @ Divakar – Hima