[英]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.