我正在尝试实现一个循环,该循环迭代张量的行,检索每行中的索引,使用它们从另一个张量中收集向量,最后将这些向量组合成一个新的张量。
问题在于每行可能包含不同数量的索引(例如[[ -1,-1,1,4,-1 ],[ 3,-1,-1,-1,-1 ]]第一行索引:[1,4];第二行索引[3])。
当我使用tf.while_loop或tf.scan时,问题就出现了。对于第一个问题,我不知道如何将所有收集到的张量堆叠在一起。对于第二个问题,它要求所有输出具有相同的形状(似乎我无法告诉所有输出具有[None,10]的一般形状)。
是否有人曾经尝试过类似的事情?
我附上了while_loop的代码:
这里缺少的是将while_loop输出的所有(每个i的i_vec)一起堆叠到新张量中。
问题在于每行可能包含不同数量的索引(例如[[ -1,-1,1,4,-1 ],[ 3,-1,-1,-1,-1 ]]第一行索引:[1,4];第二行索引[3])。
当我使用tf.while_loop或tf.scan时,问题就出现了。对于第一个问题,我不知道如何将所有收集到的张量堆叠在一起。对于第二个问题,它要求所有输出具有相同的形状(似乎我无法告诉所有输出具有[None,10]的一般形状)。
是否有人曾经尝试过类似的事情?
我附上了while_loop的代码:
i = tf.constant(0)
def body(i, merging):
i += 1
print('i', i)
i_row = tf.gather(dense, [i])
i_indices = tf.where(i_row > 0)[:, 1]
i_vecs = tf.gather(embeddings_ph, i_indices)
return i, i_vecs
tf.while_loop(lambda i, merging : tf.less(i, 2), body,
loop_vars=[i,merging],
shape_invariants=[i.get_shape(),
tf.TensorShape((None, 3))],
name='vecs_gathering')
这里缺少的是将while_loop输出的所有(每个i的i_vec)一起堆叠到新张量中。