Как повторно использовать Tashorflow HashTable - PullRequest
0 голосов
/ 12 апреля 2020

Я хочу использовать один и тот же Tensorflow HashTable в разных местах. Я использую TF1.15.

Один простой способ сделать это - создать таблицу один раз и передать ее в качестве аргумента всем функциям, использующим ее.

В Tensorflow это возможно повторное использование переменных, созданных с помощью tf.get_variable() с использованием tf.get_variable_scope(reuse=True).

Мне интересно, существует ли такой механизм для HashTables.

Я хотел бы следующий код для повторного использования таблицы с тем же именем.

def lookup(keys, name="lookup", reuse=None):
    with tf.variable_scope(name, reuse=reuse):
        table = tf.contrib.lookup.index_table_from_file("mapping.txt")
        return table.lookup(keys)


keys = tf.constant([b"foo", b"bar", b"baz"])
ids1 = lookup(keys)
ids2 = lookup(keys, reuse=True)
with tf.Session() as sess:
    sess.run(tf.tables_initializer())
    print(sess.run(ids1))
    print(sess.run(ids2))
    print([op for op in tf.get_default_graph().get_operations() if op.type == "HashTableV2"])

Это печатает

Table trying to initialize from file mapping.txt is already initialized.
[ 0  1 -1]
[ 0  1 -1]
[<tf.Operation 'lookup/string_to_index/hash_table' type=HashTableV2>, <tf.Operation 'lookup_1/string_to_index/hash_table' type=HashTableV2>]

Журналы сбивают с толку:

  • кажется, что инициализация ссылается на тот же объект (сначала строка)
  • но в списке операций видно, что на графике 2 таблицы

Что происходит? Как переменные HashTable поддерживаются в Tensorflow? Что именно HashTables? Есть ли эквивалент get_variable_scope(reuse=True)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...