裁剪张量的一部分

Clip parts of a tensor

我有一个 theano 张量,我想裁剪它的值,但每个索引都在不同的范围内。

例如,如果我有一个向量 [a,b,c] ,我想将 a 裁剪到 [0,1] ,将 b 裁剪到 [2,3] 和 c 裁剪到 [3,5]。

我怎样才能有效地做到这一点? 谢谢!

theano.tensor.clip 操作支持符号最小值和最大值,因此您可以传递三个张量,所有张量都具有相同的形状,并且它将对第一个相对于第二个(最小值)执行逐元素裁剪) 和第三个(最大)。

此代码显示了此主题的两个变体。 v1 要求将最小值和最大值作为单独的向量传递,而 v2 允许将最小值和最大值传递得更像成对列表,表示为两列矩阵。

import theano
import theano.tensor as tt


def v1():
    x = tt.vector()
    min_x = tt.vector()
    max_x = tt.vector()
    y = tt.clip(x, min_x, max_x)
    f = theano.function([x, min_x, max_x], outputs=y)
    print f([2, 1, 4], [0, 2, 3], [1, 3, 5])


def v2():
    x = tt.vector()
    min_max = tt.matrix()
    y = tt.clip(x, min_max[:, 0], min_max[:, 1])
    f = theano.function([x, min_max], outputs=y)
    print f([2, 1, 4], [[0, 1], [2, 3], [3, 5]])


def main():
    v1()
    v2()


main()