'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 |
