Wie verwende ich tf.nn.embedding_lookup_sparse in TensorFlow?

Wir haben versucht mittf.nn.embedding_lookup und es funktioniert. Aber es braucht dichte Eingabedaten und jetzt brauchen wirtf.nn.embedding_lookup_sparse für spärliche Eingabe.

Ich habe den folgenden Code geschrieben, erhalte jedoch einige Fehler.

import tensorflow as tf
import numpy as np

example1 = tf.SparseTensor(indices=[[4], [7]], values=[1, 1], shape=[10])
example2 = tf.SparseTensor(indices=[[3], [6], [9]], values=[1, 1, 1], shape=[10])

vocabulary_size = 10
embedding_size = 1
var = np.array([0.0, 1.0, 4.0, 9.0, 16.0, 25.0, 36.0, 49.0, 64.0, 81.0])
#embeddings = tf.Variable(tf.ones([vocabulary_size, embedding_size]))
embeddings = tf.Variable(var)

embed = tf.nn.embedding_lookup_sparse(embeddings, example2, None)

with tf.Session() as sess:
    sess.run(tf.initialize_all_variables())

    print(sess.run(embed))

Das Fehlerprotokoll sieht so aus.

Now Ich habe keine Ahnung, wie ich diese Methode korrigieren und richtig anwenden soll. Jeder Kommentar könnte geschätzt werden.

Nach dem Eintauchen insafe_embedding_lookup_sparse Unit Test, ich bin mehr verwirrt, warum ich dieses Ergebnis habe, wenn ich die spärlichen Gewichte gebe, vor allem, warum wir so etwas wie @ habembedding_weights[0][3] wo3 ist im obigen Code nicht enthalten.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage