Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Tensorflow Dictionary lookup with String tensor

Is there any way to perform a dictionary lookup based on a String tensor in Tensorflow?

In plain Python, I'd do something like

value = dictionary[key]

. Now I'd like to do the same thing at Tensorflow runtime, when I have my key as a String tensor. Something like

value_tensor = tf.dict_lookup(string_tensor)

would be nice.

like image 691
mackcmillion Avatar asked Feb 10 '16 13:02

mackcmillion


2 Answers

If you want to run this with new TF 2.x code with eager execution enabled by default. Below is the quick code snippet.

import tensorflow as tf

# build a lookup table
table = tf.lookup.StaticHashTable(
    initializer=tf.lookup.KeyValueTensorInitializer(
        keys=tf.constant([0, 1, 2, 3]),
        values=tf.constant([10, 11, 12, 13]),
    ),
    default_value=tf.constant(-1),
    name="class_weight"
)

# now let us do a lookup
input_tensor = tf.constant([0, 0, 1, 1, 2, 2, 3, 3])
out = table.lookup(input_tensor)
print(out)

Output:

tf.Tensor([10 10 11 11 12 12 13 13], shape=(8,), dtype=int32)
like image 107
Praveen Kulkarni Avatar answered Oct 14 '22 21:10

Praveen Kulkarni


You might find tensorflow.contrib.lookup helpful: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lookup/lookup_ops.py

https://www.tensorflow.org/api_docs/python/tf/contrib/lookup/HashTable

In particular, you can do:

table = tf.contrib.lookup.HashTable(
  tf.contrib.lookup.KeyValueTensorInitializer(keys, values), -1
)
out = table.lookup(input_tensor)
table.init.run()
print out.eval()
like image 24
Saurfang Avatar answered Oct 14 '22 22:10

Saurfang