我在Python中实现了一个神经网络,作为反向传播的一部分,我需要将一个3D矩阵A,尺寸为(200, 100, 1)
,与一个2D矩阵W,尺寸为(100, 200)
相乘,结果应具有尺寸(200, 200, 1)
。
A是一个误差向量,W是一个权重矩阵,它们的乘积将用于计算前一层的更新。
我尝试使用matrix_multiply
(来自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)
错误。
我该如何解决这个问题?
回答:
你可以使用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)
或者,我们可以使用np.dot
,只使用A
的最后一个轴的切片,然后在矩阵乘法后扩展到3D
–
A[:,:,0].dot(W)[...,None]
或者我们可以使用np.einsum
–
np.einsum('ijk,jl->ilk',A,W)