在张量流中以元素方式从两个张量中获取更高的值

时间:2018-06-02 19:26:11

标签: python tensorflow

我有2个相同大小的2d张量(假设形状= [80,90])。 我想获得其元数值绝对值更大的变量的值。

在python中我会做这样的事情:

mask = np.abs(a)>np.abs(b)

c = a*mask + b*~mask

如何在仍然能够计算渐变的情况下在tensorflow中执行此操作?

我知道我可以这样做:

mask = tf.abs(a) > tf.abs(b)

然后:

c= tf.cast(mask, tf.float32) * a + tf.cast(~mask, tf.float32) * b

不会传递渐变,因为强制转换操作不会传递渐变。

2 个答案:

答案 0 :(得分:2)

使用np.maximum:

np.maximum(a, b, where=abs(a) > abs(b))

答案 1 :(得分:1)

@coldspped答案工作正常。但是如果你想要一个可以基于随机掩码提取元素的通用方法,你可以使用tf.where api。对于您的问题,答案如下:

mask = tf.abs(a) - tf.abs(b)
c = tf.where(mask, a, b)