2017-05-31 85 views
0

我想乘以以張量形式表達的堆疊矩陣。有沒有一種方法可以在張量流中張緊tensordot運算中的張量?

tensor.shape == [2,5,7,6] 

其中2和5是批次的大小,

tensor2.shape == [5,6,8]

其中5是批量大小。

在numpy的,tensor2自動廣播到[2,5,7,6]張量

所以可以輕鬆地使用np.matmul(tensor,tensor2)

但在tensorflow,會出現誤差。

我試圖tf.expand_dims(tensor2,0)但這也不起作用

有沒有什麼辦法來播出tensorflow張量?

回答

1

你可以使用tf.einsum

tf.einsum('abij,bjk->abik', tensor, tensor2) 

例子:

import tensorflow as tf 
x = tf.zeros((2, 5, 7, 6)) 
y = tf.zeros((5, 6, 8)) 
z = tf.einsum('abij,bjk->abik', x, y) 
z.shape.as_list() 
# returns [2, 5, 7, 8] 
+0

我想這一點,但這個結果在2,7,8張量形狀是有我錯過? – bj1123

+0

我不知道 - 我添加了一個小例子供您檢查。 – user1735003

1

解決此類問題的最一般和適當的方法是使用tf.einsum。該功能允許您直接使用Einstein notation指定乘法規則,該規則是爲了以任意維數的張量運行而發明的。