我们说我有两个具有相同形状的张量a
和b
。我想完全按照a
中指定的次数重复b
的元素。我怎样才能在Tensorflow中实现这一目标?
在numpy中,我使用np.repeat
:
import numpy as np
a = np.array([0.5,0.1,0.15,0.25])
b = np.array([100,50,200,10])
c = np.repeat(a, b)
如何在tensorflow中执行此操作?
非常(肮脏且可能效率低下)的解决方法是将两者都拆分到列表中,并在每个元素上使用tf.tile
,然后concat
结果。我设法做了这样的工作:
a = tf.constant([0.5,0.1,0.15,0.25])
b = tf.constant([3,1,5,2])
a_list = tf.unstack(a)
b_list = tf.unstack(b)
result = []
for i in range(len(a_list)):
tmp = tf.tile([a_list[i]], [b_list[i]])
result.append(tmp)
final = tf.concat([*result], axis=0)
结果:
final.eval()
Out:
array([ 0.5 , 0.5 , 0.5 , 0.5 , 0.1 ,
0.15000001, 0.15000001, 0.15000001, 0.25 , 0.25 ], dtype=float32)
还有更好的方法吗?
答案 0 :(得分:0)
我认为可以找到一个更好的解决方案here,它使用tf.while
(而不是Python for循环)来实现你想要的。此解决方案专门重复tf.range
中的元素,但我认为您可以将其更改为适用于任意输入张量。
FWIW有一个open issue on the TensorFlow github repo要求这个实现(我找到了上面代码的链接)。