2017-02-11 91 views
1

我在python中實現了一個神經網絡,作爲反向傳播的一部分,我需要乘以一個3D矩陣,稱爲A,維度爲(200, 100, 1),由2D矩陣表示,稱之爲W,維度爲(100, 200)結果應該有尺寸(200, 200, 1)numpy數組上的多維矩陣乘法

A是誤差矢量,W是權重矩陣,該產品將被用於計算先前層的更新。

我嘗試使用matrix_multiplyfrom numpy.core.umath_tests),我試圖重塑W至(100,200,1),然後乘以解決它,而是拋出

ValueError: matrix_multiply: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (m,n),(n,p)->(m,p) (size 100 is different from 1)

我該如何解決這個問題?

+0

你有保持'A'的形狀(200,100,1),而不是丟棄瑣碎的尺寸和製作它的形狀(200,100),一個令人信服的理由? –

+0

@WarrenWeckesser我沒有考慮這個選項。感謝您的建議,我將探討它。 – dpk

回答

3

你可以使用np.tensordot,然後置換軸與swapaxes或者乾脆reshape -

np.tensordot(A,W,axes=((1),(0))).swapaxes(1,2) 
np.tensordot(A,W,axes=((1),(0))).reshape(A.shape[0],W.shape[1],1) 

另外,我們利用沿A最後軸的唯一切片可以使用np.dot然後矩陣相乘後延伸到3D -

A[:,:,0].dot(W)[...,None] 

或者我們可以使用np.einsum -

np.einsum('ijk,jl->ilk',A,W)