将一个大小可变的numpy数组转换为Tensorflow张量。

5

我正在尝试Tensorflow 2.0 alpha预览版,并测试Eager执行。我的疑问是,如果您在中间有一个可变大小的numpy数组,例如

input.shape
(10,)

input[0].shape
(109, 16)

input[1].shape
(266, 16)

对于数组的其余部分,如何将它们迅速转换为张量。

当我尝试使用下面的代码时

tf.convert_to_tensor(input)

或者

tf.Variable(input)

我遇到了问题:

ValueError: 无法将numpy ndarray转换为Tensor(无法获取元素字节)。

虽然转换每个子数组都能正常工作,但由于子数组大小不同,tf.stack函数无法正常工作。

请问有什么帮助或建议吗?


1
我认为你可能想使用不规则张量 - jdehesa
1
我尝试了ragged,但仍然出现相同的错误。还有其他建议吗? - Niteya Shah
你的 input 看起来是一个 NumPy 对象数组,也许尝试将其转换为列表 (list(input))? - jdehesa
@jdehesa 使用列表来处理不规则张量需要我创建一个列表的列表,但是对于我的数组来说,我不想这样做,因为它的大小很大。 - Niteya Shah
3个回答

3

这种情况在使用eager模式下也发生在我身上。查看此处的文档后,我尝试了以下操作:

tf.convert_to_tensor(input, dtype=tf.float32)

这对我很有效。


1
如果您可以制作数组列表,那么 tf.ragged.stack 就可以做到。例如,您可以这样使用它:
tf.ragged.stack([tf.convert_to_tensor(arr) for arr in arrays], axis=0)

这将不同大小的数组堆叠成一个RaggedTensor

0

看起来唯一的方法是使用列表的列表,然后将它们转换为不规则张量,因为numpy对不规则数组的支持不太好。如果我发现了任何新的东西,我会更新的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接