夹紧张量的部分

时间:2015-09-26 17:10:23

标签: theano

我有一个theano张量,我想剪切它的值,但每个索引到不同的范围。

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

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

1 个答案:

答案 0 :(得分:1)

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()