Wir haben versucht mit tf.nn.embedding_lookup
und es funktioniert. Aber es braucht dichte Eingabedaten und jetzt brauchen wir tf.nn.embedding_lookup_sparse
für sparse Eingabe.Wie tf.nn.embedding_lookup_sparse in TensorFlow zu verwenden?
Ich habe den folgenden Code geschrieben, aber einige Fehler bekommen.
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.
Jetzt habe ich keine Ahnung, wie diese Methode richtig fixieren und zu verwenden. Jeder Kommentar könnte geschätzt werden.
Nach dem Tauchen in safe_embedding_lookup_sparse
‚s Unit-Test, bin ich mehr verwirrt, warum ich dieses Ergebnis bekam, wenn die spärlichen Gewicht geben, vor allem, warum wir so etwas wie embedding_weights[0][3]
bekamen, wo 3
wird in dem obigen Code nicht erschienen.
Bitte, lassen Sie mich wissen, ob meine Antwort Ihr Problem :) – rvinas
@rvinas Dank gelöst. Ich finde es noch nicht heraus, nachdem ich den 'safe_embbedding_lookup_sparse' Unit Test gelesen habe. Ich habe die Frage aktualisiert und möchten Sie den Code für uns erklären? – tobe
Könnten Sie bitte den Rohcode angeben? – rvinas