首页 文章

通过Theano张量切片循环

提问于
浏览
2

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

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

然而,我想要做的是构造一个新的张量,它由10个块中的均方误差组成 . 换句话说,因为我对NumPy更熟悉,我想到的是创建下面的张量M in Theano:

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(无)和整数或布尔数组是有效的索引

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

1 回答

  • 1

    类似于在_2868686中可以做到的,一个解决方案是将你的(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.])
    

相关问题