2017-05-31 63 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指定乘法规则,该规则是为了以任意维数的张量运行而发明的。