重复张量元素并在张量流中形成新的张量

时间:2018-10-16 23:05:51

标签: python tensorflow

说我有一个张量A = [a1,a2,...],我想重复张量的元素并形成一个新的张量。每个元素的重复次数在另一个张量B中指示。例如,如果B = [1,3,2,2,..],结果应为[a1,a2,a2,a2,a3,a3,a4 ,a4,...]。有没有一种有效的方法可以在不使用循环的情况下在tensorflow中执行此操作?

1 个答案:

答案 0 :(得分:0)

这是从此try that in the TypeScript playground复制的。我正在解释它,因为它很有趣并且没有循环。不知道它是否有效。

如果我们假设我们要重复[3,4,5]次并重复tf.cumsum次,那么要点是它们会创建这样的稀疏张量。

  

[1。 0. 0. 1. 0. 0. 0. 1. 0. 0. 0. 0。]

并巧妙地使用tf.cumsum([3,4,5]填充它。

  

[1。 1. 1. 2. 2. 2. 2. 2. 3. 3. 3. 3. 3。]

我在这里尽可能地解释程序。

[ 3 7 12]给出tf.cumsum([3, 4, 5][:-1])

[3 7]在删除最后一个元素12后给出tf.concat([tf.constant([0], dtype=tf.int32), tf.cumsum([3,4,5][:-1])], axis=0)

[0 3 7]给出1 这是我们看到1的索引。

  

[1。 0. 0. 1. 0. 0. 0. 1. 0. 0. 0. 0。]

然后使用[1,2,3] - tf.concat([tf.constant([0], dtype=tf.float64), [1,2,3][:-1]], axis=0)

获得[1, 2, 3]

等效于这样减去。 [0, 1, 2]-[1 1 1]。这将为稀疏索引的值提供12

[3, 4, 5]作为output_shape是输出中所需的总占位符,它是我们的重复张量print(sess.run( tf.cumsum( tf.sparse_to_dense( sparse_indices=[0, 3, 7], output_shape=(12,), sparse_values=[1, 1, 1]))))

的累加总和。

这给出了最终的输出。

 ----RID---Name-----
      1     Process1
      2     Process2