【问题标题】:Looping through slices of Theano tensor循环遍历 Theano 张量的切片
【发布时间】:2015-11-14 22:19:47
【问题描述】:

我有两个 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(映射是一个特殊情况),我想我会尝试以下方法:

    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 的新手!

【问题讨论】:

    标签: arrays python-2.7 numpy slice theano


    【解决方案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.])
    

    【讨论】:

    • 谢谢!这比使用扫描要容易得多!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 2012-01-22
    • 2012-09-12
    • 1970-01-01
    相关资源
    最近更新 更多