遍历 Theano 张量的切片

Looping through slices of Theano tensor

我有两个 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(哪个 map 是其特例),我想我会尝试以下操作:

    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)

但是,这似乎不起作用,因为我收到错误消息:

only integers, slices (:), ellipsis (...), numpy.newaxis (None) and integer or boolean arrays are valid indices

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

类似于 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.])