Tensorflow 使用from_generator创建SparseTensors的TF数据集

Tensorflow 使用from_generator创建SparseTensors的TF数据集,tensorflow,dataset,sparse-matrix,Tensorflow,Dataset,Sparse Matrix,我有一个生成器,可以生成tf.sparse.SparseTensors。我想将其转换为Tensorflow数据集,但遇到了一些问题。我正在使用TF2。首先,与常规张量不同,您不能简单地传入它们(并为输出类型提供正确的数据类型)。对于[1,0,0,0,5,0]的稀疏张量,错误如下 tensorflow.python.framework.errors_impl.InvalidArgumentError: TypeError: `generator` yielded an element that c

我有一个生成器,可以生成
tf.sparse.SparseTensor
s。我想将其转换为Tensorflow数据集,但遇到了一些问题。我正在使用TF2。首先,与常规张量不同,您不能简单地传入它们(并为输出类型提供正确的数据类型)。对于
[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)).
在互联网上四处查看之后,我发现了这个公开问题,并尝试做一些类似的事情——将索引、值和形状作为单独的张量读取到TF数据集中,然后映射到数据集中以创建稀疏张量。这与github问题中的一些示例不一样-
tf.sparse.SparseTensor(索引、值、形状)
似乎不接受tf.Tensor形式的索引和形状-它很乐意接受列表或numpy数组,但不是张量。由于
map
并不急切,我也不能调用张量上的
.numpy()
。什么是最好的方法让它工作?我看到有
tf.py_函数
/
tf.numpy_函数
可能会有所帮助,但对于我的用例来说,构造输出类型可能会很棘手(尽管并非不可能)——传入的数据不是固定的,并且可能有稀疏张量和密集张量的混合