我有一个theano张量,我想剪切它的值,但每个索引到不同的范围。
例如,如果我有一个向量[a,b,c],我想将a剪辑为[0,1],剪辑b为[2,3],c为[3,5]。
我怎样才能有效地做到这一点? 谢谢!
答案 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()