我有两个2D Theano张量,称它们为 x_1
和 x_2
,并且假设为了示例, x_1
和 x_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 回答
类似于在_2868686中可以做到的,一个解决方案是将你的(1,50)张量重塑为(1,10,5)张量(或甚至是(10,5)张量),然后计算均值沿第二轴 .
为了用numpy来说明这一点,假设我想通过2的切片计算均值
输出