tf.stack не удалось собрать sparseTensors - PullRequest
0 голосов
/ 04 октября 2019

Невозможно сложить 2 SparseTensors. Тот же код работает с to_dense, но я думал, что код набора данных работает напрямую со SparseTensors?

Я пытаюсь взять 2 sparseTensors (каждый представляющий один образец) и сложить их - чтобы быть партией из 2. ЭтоКажется, мне нужно вызвать tf.sparse.to_dense - чтобы вернуть набор данных.

Следующий код работает идеально:

import tensorflow as tf
tf.enable_eager_execution()

sparseTensor1 = tf.SparseTensor(indices=[[0, 0, 0], [1, 1, 0]], values=[9, 21], dense_shape=[2, 2, 2])
sparseTensor2 = tf.SparseTensor(indices=[[0, 0, 0], [1, 1, 0], [1,1,1]], values=[4, 33, 99], dense_shape=[2, 2, 2])

"""
This works: but is inefficient:
"""
denseTensor1 = tf.sparse.to_dense(sparseTensor1) 
denseTensor2 = tf.sparse.to_dense(sparseTensor2)

stackedDenseTensors = tf.stack([denseTensor1, denseTensor2])
damonsDatasetFromDense = tf.data.Dataset.from_tensors(stackedDenseTensors)


iterator1 = damonsDatasetFromDense.make_one_shot_iterator()
for next_batch in iterator1:
    tf.print(next_batch)

""" 
however if I try without the tf.sparse.to_dense code I cannot stack:
"""
sparseDataSet1 = tf.data.Dataset.from_tensors(sparseTensor1)
sparseDataSet2 = tf.data.Dataset.from_tensors(sparseTensor2)
stackedSparseTensors = tf.stack([sparseTensor1, sparseTensor2])

Опять же, я подумал, что API набора данных можетработать напрямую с разреженными данными.

Вместо этого я получаю из стека следующее: ValueError: Попытка преобразовать значение () с неподдерживаемым типом () в Tensor. "" "

...