テンソルの行を繰り返し処理するループを実装しようとしていて、各行のインデックスを取得し、別のテンソルのベクトルを集めて最後に新しいベクトルテンソル。 問題は、各行に異なる数のインデックスが含まれている可能性があります(例:[[-1、-1,1,4、-1]、[3、-1、-1、-1、-1]]最初の行インデックス:[1,4]、第2行インデックス[3])。 tf.while_loopまたはtf.scanを使用すると問題が発生します。最初のものでは、集められたすべてのテンソルを一緒に積み重ねる方法を理解していません。代わりに、すべての出力が同じ形状を持つようにします(すべての出力が[なし、10]の一般的な形を持っているとは思われません)。TensorFlow:whileループでテンソルを積み重ねる
これまで誰かが似たようなことを試みましたか?
私は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')
何そのここに欠けていることは、新たなテンソルで一緒に(各iについてi_vec)をすべてWHILE_LOOP出力を積み重ねることです。