2017-10-24 2 views
1

ein festes Wörterbuch mit eindeutigen Schlüssel gegeben und Werte (alle Zahlen sind nicht negativen ganzen Zahlen):Tensorflow verwandeln Tensor mit Vektor-Lookups

d = {(1,3): 6, (5,4): 9} 

was eine effiziente Art und Weise in tensorflow wäre zu verwandeln:

tf.constant([[1,3], [5,4], [1,3]]) -> tf.constant([6, 9, 6]) 

und umgekehrt:

tf.constant([6, 9, 6]) -> tf.constant([[1,3], [5,4], [1,3]]) 

Antwort

1

ein LookupTable Modul in tensorflow gibt es - die Dokumentation ist um: https://www.tensorflow.org/api_docs/python/tf/contrib/lookup

+1

Ich konnte es nicht mit Vektorschlüssel – eyaler

+0

arbeiten Um 'Lookup' zu verwenden, müssen Sie einen Tensor und IDs der Achse nachschlagen, also der zweite Teil:' tf.constant ([6, 9, 6]) -> tf.constant ([[1,3], [5,4], [1,3]]) 'könnte funktionieren, wenn Sie das richtige Format haben. Aber das Vektor-zu-ID-Mapping würde mehr Arbeit erfordern. –

2

Wie @OphirYoktan erwähnt, gibt es einen Suchoperator. Ich würde empfehlen, tf.embedding_lookup zu verwenden, aber da Sie anstreben, auch vector - id abzubilden, konnten Sie das folgende tun.

Verwenden tf.map_fn

d_inverse = {v:k for k,v in d.items()} 
d_mapped = tf.map_fn(lambda x: d[x], d.values()) 
d_mapped_inverse = tf.map_fn(lambda x: d_inverse[x], d_inverse.items()} 

Sie nur die Werte in den dicts d und d_inverse als tf.constants

Having said festlegen müssen, dass, sollten diese Zuordnungen mit rechentechnischen Gründen zu tun haben, Ihr Diagramm in Bezug auf, sonst Ich würde dir raten, sie außerhalb der Grafik zu machen.

+0

map_fn sollte auf Tensor wirken, nicht auf Werte oder Elemente – eyaler