我有一个张量形状(2,G)和另一个形状(N,2)。
我需要以输出为(N,2,G)的方式添加它们,这意味着第一个张量被复制到(N,2,G),然后第二个张量被添加到每个矩阵中第三个维度。 (反之亦然:第二个张量复制到(N,2,G),第一个张量沿第一个维度加到每个子张量上。)
如何在Theano中有效地完成这项工作? 感谢。
答案 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=3
和N=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]]))