2017-06-26 1 views
2

Hej Jungs, Ich versuche, multi beschriftet kategorische Daten in einen dichten Raum mit Einbettungen zu projizieren.Tensorflow Einbettung Lookup mit ungleich großen Listen

Hier ist ein Spielzeugbeispiel. Nehmen wir an, ich habe vier Kategorien und möchte sie in einen 2D-Raum projizieren. Außerdem habe ich zwei Instanzen, die erste Kategorie gehören, 0 und die zweite Kategorie 1.

Der Code etwa wie folgt aussehen:

sess = tf.InteractiveSession() 
embeddings = tf.Variable(tf.random_uniform([4, 2], -1.0, 1.0)) 
sess.run(tf.global_variables_initializer()) 
y = tf.nn.embedding_lookup(embeddings, [0,1]) 
y.eval() 

und zurück etwas wie folgt aus:

array([[ 0.93999457, -0.83051205], 
     [-0.1699729 , 0.73936272]], dtype=float32) 

So weit, so gut. Stellen Sie sich vor, eine Instanz gehört zu zwei Kategorien. Die Einbettung Lookup zwei Vektoren zurück, die ich durch meine zum Beispiel reduzieren:

y = tf.nn.embedding_lookup(embeddings, [[0,1],[1,2]]) # two categories 
y_ = tf.reduce_mean(y, axis=1) 
y_.eval() 

Dies funktioniert genauso wie ich es auch erwartet. Mein Problem stellt sich nun, wenn Instanzen in meinen Charge werden nicht auf die gleiche Menge an Kategorien gehören z.B .:

y = tf.nn.embedding_lookup(embeddings, [[0,1],[1,2,3]]) # unequal sized lists 
y_ = tf.reduce_mean(y, axis=1) 
y_.eval() 

ValueError: Argument must be a dense tensor: [[0, 1], [1, 2, 3]] - got shape [2], but wanted [2, 2]. 

Jede Idee, wie dieses Problem zu bekommen?

Antwort

0

Ich bin sehr weit von einem ML-Experten, aber vielleicht können Sie Folgendes tun. Anstatt einen Datenpunkt darzustellen, der zur Kategorie 2 gehört, können Sie [0, 0, 1, 0] tun. Mit anderen Worten, behandeln Sie jede Kategorie als eine Dimension Ihrer Eingabe und verwenden Sie 0 or 1, um die Instanz zu repräsentieren, die zur Kategorie gehört oder nicht.

Da eine solche Darstellung sehr spärlich ist, können Sie SparseTensor und https://www.tensorflow.org/api_docs/python/tf/nn/embedding_lookup_sparse verwenden. Hier ist ein Beispiel für seine Verwendung How to use tf.nn.embedding_lookup_sparse in TensorFlow?

Verwandte Themen