Niteya Shah
Niteya Shah

Reputation: 1824

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 ?

Upvotes: 5

Views: 7393

Answers (3)

Phoenix
Phoenix

Reputation: 341

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.

Upvotes: 1

HeyWatchThis
HeyWatchThis

Reputation: 23563

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.

Upvotes: 3

Niteya Shah
Niteya Shah

Reputation: 1824

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

Upvotes: 0

Related Questions