Ich habe einen Tensor von teilweise unbekannter Form und eine Maske - ein Tensor der gleichen Form mit 1.0
oder 0.0
gefüllt - und ich möchte es nur in einen SparseTensor konvertieren die Elemente, die 1.0
in der Maske entsprechen. Also, ich denke, muss ich mit etwas gehen wie:Konvertieren Tensor unbekannter Form zu einem SparseTensor in Tensorflow
import tensorflow as tf
tf.reset_default_graph()
tf.set_random_seed(23)
BATCH = 3
LENGTH = None
dense = tf.placeholder(shape=[BATCH, LENGTH], dtype=tf.float32, name='dense')
mask = tf.placeholder(shape=[BATCH, LENGTH], dtype=tf.float32, name='mask')
indices = tf.where(tf.equal(mask, 0.0))
values = tf.gather_nd(dense, indices)
Zu diesem Zeitpunkt weiß ich nicht, wie es weitergehen, da sowohl die Art und Weise, dass ich versucht in verschiedenen Fehler endete, wie folgt. Der erste:
sparse = tf.SparseTensor(indices, values, shape=tf.shape(dense))
ValueError: Tensor conversion requested dtype int64 for Tensor with dtype int32: 'Tensor("Shape:0", shape=(2,), dtype=int32)'
Der zweite:
sparse = tf.SparseTensor(indices, values, shape=dense.get_shape())
ValueError: Cannot convert a partially known TensorShape to a Tensor: (3, ?)
Der dritte:
sparse = tf.SparseTensor(indices, values, shape=[BATCH, LENGTH])
TypeError: Expected int64, got None of type '_Message' instead.
Jeder Hinweis? Vielen Dank!
In Ihrem Fall, ist nicht die Form für SparseTensor nur [BATCH, LÄNGE]? –
@ abhisheknaik96 versucht. Der dritte Fehler wurde hinzugefügt, indem ich die explizite '[BATCH, LENGTH]' Liste verwende. – petrux
Ich verstehe. Darf ich fragen, wie die Variable LENGTH überhaupt gesetzt wird? –