[英]ValueError: Shape must be rank 2 but is rank 3 for 'MatMul'
[英]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,)))
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.