Я хочу использовать один и тот же 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)
?