簡體   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