繁体   English   中英

广播np.dot vs tf.matmul以进行张量矩阵乘法(形状必须为2级,但为3级错误)

[英]Broadcasting np.dot vs tf.matmul for tensor-matrix multiplication (Shape must be rank 2 but is rank 3 error)

假设我有以下张量:

X = np.zeros((3,201, 340))
Y = np.zeros((340, 28))

用numpy成功制作X,Y的点积,并产生形状的张量(3,201,28)。 但是使用tensorflow我得到以下错误: Shape must be rank 2 but is rank 3 error ...

最小代码示例:

X = np.zeros((3,201, 340))
Y = np.zeros((340, 28))
print(np.dot(X,Y).shape) # successful (3, 201, 28)
tf.matmul(X, Y) # errornous

知道如何使用张量流实现相同的结果吗?

因为,你正在与tensors ,这将是更好(性能)使用tensordot那里比np.dot NumPy允许它(numpy.dot)通过降低性能来处理tensors ,而tensorflow似乎根本不允许这样做。

因此,对于NumPy,我们将使用np.tensordot

np.tensordot(X, Y, axes=((2,),(0,)))

对于tensorflow ,它将与tf.tensordot

tf.tensordot(X, Y, axes=((2,),(0,)))

相关文章了解tensordot

Tensorflow不允许像numpy一样乘以不同等级的矩阵。

为了解决这个问题,您可以调整矩阵的形状。 通过将一个矩阵“堆叠”在另一个矩阵之上,这实质上将矩阵3转换为矩阵3,然后转换为矩阵2。

您可以使用以下代码: tf.reshape(tf.matmul(tf.reshape(Aijk,[i*j,k]),Bkl),[i,j,l])

其中i,j和k是矩阵一的维数,而k和l是矩阵2的维数。

取自这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM