Создайте набор данных TF из SparseTensors с помощью from_generator - PullRequest
0 голосов
/ 18 июня 2020

У меня есть генератор, выдающий tf.sparse.SparseTensor s. Я хочу превратить это в набор данных Tensorflow, но столкнулся с некоторыми проблемами. Я использую TF2. Во-первых, в отличие от обычных тензоров, вы не можете просто передать их (и предоставить правильные типы данных для output_types). Для разреженного тензора [1,0,0,0,5,0] ошибка выглядит как

tensorflow.python.framework.errors_impl.InvalidArgumentError: TypeError: `generator` yielded an element that could not be converted to the expected type. The expected type was int64, but the yielded element was SparseTensor(indices=tf.Tensor(
E     [[0]
E      [4]], shape=(2, 1), dtype=int64), values=tf.Tensor([1 5], shape=(2,), dtype=int64), dense_shape=tf.Tensor([6], shape=(1,), dtype=int64)).

После некоторого осмотра inte rnet я обнаружил эту открытую проблему и попытался сделать что-то подобное https://github.com/tensorflow/tensorflow/issues/16689 - считайте индексы, значения и форму как отдельные тензоры в набор данных TF, а затем сопоставьте набор данных для создания разреженного тензора. Это не работает, как показано в некоторых примерах в выпуске github - tf.sparse.SparseTensor(indices, values, shape), похоже, не принимает индексы и форму в форме tf.Tensor - он с радостью принимает список или массив numpy, но не тензор. Поскольку map не горит желанием, я также не могу позвонить .numpy() на Tensor. Как лучше всего заставить это работать? Я вижу, что есть tf.py_function / tf.numpy_function, которые могут помочь, но создание типа вывода может быть сложным (хотя и не невозможным) для моего варианта использования - входящие данные не фиксированы и могут иметь смесь разреженных и плотных тензоров.

...