'Convert a variable sized numpy array to Tensorflow Tensors

I am trying Tensorflow 2.0 alpha preview and was testing the Eager execution . My doubt is that if you have a numpy array of variable size in middle like

input.shape
(10,)

input[0].shape
(109, 16)

input[1].shape
(266, 16)

and so on for the rest of the array , how does one eagerly convert them to tensors.

when I try

tf.convert_to_tensor(input)

or

tf.Variable(input)

I get

ValueError: Failed to convert numpy ndarray to a Tensor (Unable to get element as bytes.).

Converting each sub-array works , but because the sub-array size isn't same , tf.stack doesn't work.

Any help or suggestions ?



Solution 1:[1]

This was happening to me in eager as well. Looking at the docs here , I ended up trying

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

And that worked for me.

Solution 2:[2]

It seems that the only way to work with this is to use lists of lists and then convert them to ragged tensors, since numpy doesnt support ragged arrays very well. Will Update if I find anything new

Solution 3:[3]

If you can make lists of arrays, then tf.ragged.stack should do it. You can use it like this for example:

tf.ragged.stack([tf.convert_to_tensor(arr) for arr in arrays], axis=0)

This will stack uneven sized arrays into a RaggedTensor.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 HeyWatchThis
Solution 2 Niteya Shah
Solution 3 Phoenix