Tensorflow: несовместимые типы для dataset.map() в tf.contrib.data

При использовании поиска хеш-таблицы с tf.contrib.Dataset.map() происходит сбой со следующей ошибкой:

TypeError: In op 'hash_table_Lookup', input types ([tf.string, tf.string, tf.int32]) are not compatible with expected types ([tf.string_ref, tf.string, tf.int32])

Код для воспроизведения:

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import tensorflow as tf

initializer = tf.contrib.lookup.KeyValueTensorInitializer(
    ['one', 'two', 'three'], [1, 2, 3])
hash_table = tf.contrib.lookup.HashTable(initializer, -1)

tensor = tf.convert_to_tensor(['one', 'two', 'three'])
dataset = tf.contrib.data.Dataset.from_tensor_slices(tensor)
dataset = dataset.map(lambda k: hash_table.lookup(k))

Он жалуется на несовместимость tf.string_ref и tf.string.

Странно, что он ожидает tf.string_ref, а не tf.string. Кто-нибудь знает, почему это так и что я могу с этим поделать?

Проблемы связаны с тем, что table_ref является tf.string_ref здесь.


person thertweck    schedule 17.06.2017    source источник


Ответы (1)


Это ошибка, исправленная в TensorFlow 1.3. Если вы используете TensorFlow 1.2, должен работать следующий обходной путь:

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import tensorflow as tf

# Use internal library implementation of `lookup_ops` in TensorFlow 1.2.
from tensorflow.python.ops import lookup_ops
initializer = lookup_ops.KeyValueTensorInitializer(
    ['one', 'two', 'three'], [1, 2, 3])
hash_table = lookup_ops.HashTable(initializer, -1)

tensor = tf.convert_to_tensor(['one', 'two', 'three'])
dataset = tf.contrib.data.Dataset.from_tensor_slices(tensor)
dataset = dataset.map(lambda k: hash_table.lookup(k))

Вплоть до TensorFlow 1.2 библиотека tf.contrib.lookup использовала "ссылочные типы" для представления таблиц поиска, тогда как во внутренней библиотеке (используемой для реализации tf.contrib.lookup начиная с версии 1.3) используются более современные и совместимые "типы ресурсов".

person mrry    schedule 06.09.2017