如何在theano中使用batch_tensordot,如numpy.einsum

时间:2016-12-04 13:08:26

标签: python numpy deep-learning theano numpy-einsum

我有一个形状为(3,4,5)的张量3和另一个形状为(3,4,7,5)的张量4。 在numpy,

 result = np.einsum("ijk, ijmk->ijm", tensor3, tensor4)
 print result.shape 
 (3, 4, 7)

但是在theano中,该怎么做。

1 个答案:

答案 0 :(得分:1)

第一步是转置和重塑张量,以便只保留第一个维度。在这种情况下,它非常简单,你只需要结合前两个维度:

x = tensor.tensor3()
y = tensor.tensor4()
i, j, m, k = y.shape

x_ = x.reshape((i * j, k))
y_ = y.reshape((i * j, m, k))

然后,您指定batched_tensordotx_的轴1与y_的轴2相加:

z_ = tensor.batched_tensordot(x_, y_, (1, 2))  # shape (i * j, m)

最后,重塑z_以获得前两个维度:

z = z_.reshape((i, j, m))
print(z.eval({x: np.zeros((3, 4, 5)), y: np.zeros((3, 4, 7, 5))}).shape)
# (3, 4, 7)