Поиск слова тензорного слова со строковым тензором

Есть ли способ выполнить поиск словаря на основе тензора String в Tensorflow?

В простом Python я бы сделал что-то вроде

value = dictionary[key]

. Теперь я хотел бы сделать то же самое во время выполнения Tensorflow, когда у меня есть key как тензор String. Что-то вроде

value_tensor = tf.dict_lookup(string_tensor)

было бы хорошо.

Ответ 2

Если вы хотите запустить это с новым кодом TF 2.0 с активным выполнением, включенным по умолчанию. Ниже приведен фрагмент кода.

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)

Выход:

tf.Tensor([10 10 11 11 12 12 13 13], shape=(8,), dtype=int32)

Ответ 3

tf.gather может помочь вам, но он получает только значения из списка. Вы можете преобразовать словарь в списки ключей и значений, а затем применить tf.gather. Пример:

# Your dict
dict_ = {'a': 1.12, 'b': 5.86, 'c': 68.}
# concrete query
query_list = ['a', 'c']

# unpack key and value lists
key, value = list(zip(*dict_.items()))
# map query list to list -> [0, 2]
query_list = [i for i, s in enumerate(key) if s in query_list]

# query as tensor
query = tf.placeholder(tf.int32, shape=[None])
# convert value list to tensor
vl_tf = tf.constant(value)
# get value
my_vl = tf.gather(vl_tf, query)

# session run
sess = tf.InteractiveSession()
sess.run(my_vl, feed_dict={query:query_list})

Ответ 4

TensorFlow - это язык потока данных без поддержки структур данных, отличных от тензоров. Нет типа карты или словаря. Однако, в зависимости от того, что вам нужно, когда вы используете оболочку Python, можно поддерживать словарь в процессе драйвера, который выполняется в Python, и использовать его для взаимодействия с графиком TensorFlow. Например, вы можете выполнить один шаг графика TensorFlow в сеансе, вернуть значение строки в драйвер Python, использовать его в качестве ключа в словаре в драйвере и использовать полученное значение для определения следующего запрошенного вычисления из сеанса. Это, вероятно, не очень хорошее решение, если скорость поиска в словарях критически важна.