theano - 如何有效地复制和添加张量?

时间:2015-09-26 07:14:56

标签: theano

我有一个张量形状(2,G)和另一个形状(N,2)。

我需要以输出为(N,2,G)的方式添加它们,这意味着第一个张量被复制到(N,2,G),然后第二个张量被添加到每个矩阵中第三个维度。 (反之亦然:第二个张量复制到(N,2,G),第一个张量沿第一个维度加到每个子张量上。)

如何在Theano中有效地完成这项工作? 感谢。

1 个答案:

答案 0 :(得分:0)

为了解决问题,以下示例被假定为具有代表性。

如果

A = [[1, 2, 3],
     [4, 5, 6]]

B = [[1, 2],
     [3, 4],
     [5, 6],
     [7, 8]]

然后结果应该是

C = [[[  2.   3.   4.]
      [  6.   7.   8.]]
     [[  4.   5.   6.]
      [  8.   9.  10.]]
     [[  6.   7.   8.]
      [ 10.  11.  12.]]
     [[  8.   9.  10.]
      [ 12.  13.  14.]]]

此处G=3N=4

要在Theano实现这一目标,只需添加新的可播放尺寸,并依靠广播来获得所需的结果。

import numpy
import theano
import theano.tensor as tt

x = tt.matrix()
y = tt.matrix()
z = x.dimshuffle('x', 0, 1) + y.dimshuffle(0, 1, 'x')
f = theano.function([x, y], outputs=z)
print f(numpy.array([[1, 2, 3], [4, 5, 6]]), numpy.array([[1, 2], [3, 4], [5, 6], [7, 8]]))