裁剪张量的一部分
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()
我有一个 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()