通过Theano张量切片循环

时间:2015-08-21 04:32:23

标签: arrays python-2.7 numpy slice theano

我有两个2D Theano张量,称之为x_1x_2,并且假设为了示例,x_1x_2都有形状(1,50) )。现在,为了计算它们的均方误差,我只需运行:

    T.sqr(x_1 - x_2).mean(axis = -1).

然而,我想要做的是构造一个新的张量,其中包含10个块的均方误差。换句话说,因为我对NumPy更熟悉,我想到的是创建以下内容Theano中的张量M:

    M = [theano.tensor.sqr(x_1[:, i:i+10] - x_2[:, i:i+10]).mean(axis = -1) for i in xrange(0, 50, 10)]

现在,由于Theano没有for循环,而是使用scan(这是一个特例),我想我会尝试以下内容:

    sequence = T.arange(0, 50, 10)
    M = theano.map(lambda i: theano.tensor.sqr(x_1[:, i:i+10] - x_2[:, i:i+10]).mean(axis = -1), sequence)

然而,这似乎不起作用,因为我收到错误:

  

只有整数,切片(:),省略号(...),numpy.newaxis(None)和整数或布尔数组才是有效索引

有没有办法使用theano.scan(或map)遍历切片?提前谢谢,因为我是Theano的新手!

1 个答案:

答案 0 :(得分:1)

类似于numpy中可以做的,一个解决方案是将你的(1,50)张量重塑为(1,10,5)张量(甚至是(10,5)张量) ,然后计算沿第二轴的平均值。

为了用numpy来说明这一点,假设我想通过切片2来计算均值

x = np.array([0, 2, 0, 4, 0, 6])
x = x.reshape([3, 2])
np.mean(x, axis=1)

输出

array([ 1.,  2.,  3.])