Tensorflow:如何用 "multiples" 张量平铺张量的元素?
Tensorflow: How to tile elements of a Tensor with a "multiples" tensor?
假设,我有一个输入张量如下:
a = tf.constant ([[0, 0], [1, 1], [2, 2]])
和一个"multiple"张量:
mul= tf.constant([1, 3, 2])
我想要这样的结果张量:
res =
[[0, 0],
[1, 1],
[1, 1],
[1, 1],
[2, 2],
[2, 2]]
张量a的行数(n)等于第张量 mul 中的元素。
如果n是固定的,我可以使用下面的代码:
res = tf.tile ([a[0]], [mul[0], 1])
for i in range (1, 3):
res = tf.concat ((res, tf.tile ([a[i]], [mul[i], 1])), 0)
但是如果我不知道 n(它会变化),我怎样才能得到结果?
如果您有任何想法,我将不胜感激!
你最简单的选择可能是使用 py_func 将 [1, 3, 2] 变成类似 [0, 1, 1, 1, 2, 2] 的东西,它可以用作索引tf.gather.
如果静态知道 a 张量中的最大行数,我想你可以使用 tf.dynamic_partition 来获取它,但它可能会导致一个大图。
或者,tf.while_loop 加上 tf.TensorArray 来存储输出也可以。
假设,我有一个输入张量如下:
a = tf.constant ([[0, 0], [1, 1], [2, 2]])
和一个"multiple"张量:
mul= tf.constant([1, 3, 2])
我想要这样的结果张量:
res =
[[0, 0],
[1, 1],
[1, 1],
[1, 1],
[2, 2],
[2, 2]]
张量a的行数(n)等于第张量 mul 中的元素。 如果n是固定的,我可以使用下面的代码:
res = tf.tile ([a[0]], [mul[0], 1])
for i in range (1, 3):
res = tf.concat ((res, tf.tile ([a[i]], [mul[i], 1])), 0)
但是如果我不知道 n(它会变化),我怎样才能得到结果?
如果您有任何想法,我将不胜感激!
你最简单的选择可能是使用 py_func 将 [1, 3, 2] 变成类似 [0, 1, 1, 1, 2, 2] 的东西,它可以用作索引tf.gather.
如果静态知道 a 张量中的最大行数,我想你可以使用 tf.dynamic_partition 来获取它,但它可能会导致一个大图。
或者,tf.while_loop 加上 tf.TensorArray 来存储输出也可以。