我有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
不会传递渐变,因为强制转换操作不会传递渐变。
答案 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)