如何通过Tensorflow在张量中实现元素比较



在我的自定义损失函数中,我想实现这个特定的计算:

输入:

tensor A: placeholder([None, 1])
tensor B: placeholder([None, 1])

而A、B的形状相同。

输出:

tensor res: placeholder([None, 1]).

例如:

tensor   A: [0, 0, 1, 2, 2, 2, 3,...]
tensor   B: [4, 9, 2, 3, 5, 9, 4,...]
tensor res: [4, 4, 2, 3, 3, 3, 4,...]
起初,res[0] = B[0],如果 A[i] == A[i-1],则 res[i] = res[

i-1];否则,res[i] = B[i]。所以我们得到 res=[4, 4, 2, 3, 3, 3, 4,...]。

真的很纠结这个问题,而且我不应该在张量流中。希望回答,谢谢。

我不认为在tensorflow中有直接的方法可以解决这个问题。但是,您可以创建自己的操作或在tensorflow中以粗略的方式实现它

  1. condition - 创建一个数组,其中 1 在索引处传递条件,其余部分为 0。 (可以很容易地并行化并在张量流中使用tf.while_loop(

  2. prefixedSum - 在condition上使用前缀总和来创建此数组。(没有直接实现,但这会有所帮助(

  3. reducedB - 使用condition创建选定元素的数组,从数组中选择索引prefixedSum。(可以使用tf.while_loop实现(

  4. ans - 使用prefixedSum中的索引创建最终数组,并在reducedB中查找该索引。(同样可以使用tf.while_loop实现(

最新更新