遍历 Theano 张量的切片
Looping through slices of Theano tensor
我有两个 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(哪个 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.])
我有两个 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(哪个 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.])