我有两个2D Theano张量,称之为x_1
和x_2
,并且假设为了示例,x_1
和x_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的新手!
答案 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.])