平铺Theano张量

时间:2014-12-23 17:01:43

标签: python theano

我有两个张量A和B,其中第一个具有尺寸(500,10),第二个具有尺寸(500)。我想找A / B. 我使用常规/运算符,并且Theano编译器说它们应该是相同的大小。 然后我尝试在B上使用tensor.tile使其与A的大小相同。它有三个参数(x,reps,ndim)。我尝试了不同的值,我受限于这些限制: x.ndim = len(reps)和ndim = len(reps) 然后有这些约束我如何将数组平铺到矩阵?!这是Theano的错误吗?

1 个答案:

答案 0 :(得分:1)

你可以直播它,有几种方法可以做到。采取以下示例

import numpy as np
A = np.arange(1., 5001., 1.).reshape(500, 10)
B = np.arange(1., 501., 1.)

import theano
As = theano.shared(A)
Bs = theano.shared(B)

这样做的失败保护方法是添加适当的轴

AoverB = A / B[:, np.newaxis]
AoverBalso = A / B.reshape((-1, 1))
AsoverBs = As / Bs.reshape((-1, 1))

另一种方法是利用隐含广播填充第一个轴的事实,如果它们缺失

AoverBT = A.T / B.T   # no axis was added here
AsoverBsT = As.T / Bs.T

为了表明所有这些计算相同的事情,我们使用numpy.testing

from numpy.testing import assert_array_equal
assert_array_equal(AoverB, AoverBalso)
assert_array_equal(AoverB, AsoverBs.eval())
assert_array_equal(AoverB, AoverBT.T)
assert_array_equal(AoverB, AsoverBsT.T.eval())