Convertir Tensor de Enteros a Tensor de Flotantes (Java)
He cargado una imagen en un tensor de Uint8s. Ahora estoy tratando de convertir esto en un tensor de floats para poder cargarlo en mi modelo entrenado.
Para referencia, así es cómo obtuve el Tensor de Uint8s:
ReadFile readFile = tf.io.readFile(fileName);
DecodeJpeg.Options options = DecodeJpeg.channels(3L);
DecodeJpeg decodeImage = tf.image.decodeJpeg(readFile.contents(), options);
Tensor image = runner.fetch(decodeImage).run().get(0);
Shape imageShape = runner.fetch(decodeImage).run().get(0).shape();
//reshape the tensor to 4D for input to model
Reshape
tf.array(1,
imageShape.asArray()[0],
imageShape.asArray()[1],
imageShape.asArray()[2]
)
);
Pero cuando intento cargar esto en mi modelo a través de:
Tensor reshapeTensor = s.runner().fetch(reshape).run().get(0);“`
Obtengo el siguiente error:
org.tensorflow.exceptions.TFInvalidArgumentException: Se espera que el argumento[0] sea float pero se proporciona uint8
davy.ai
Para convertir el tensor Uint8 a un tensor de tipo float, puedes utilizar la función
tf.cast()
. Aquí tienes un ejemplo de cómo modificar el código para lograr esto:Al convertir el tensor de imagen a
TFloat32
, ahora puedes cargarlo en tu modelo entrenado sin obtener el error de “argumento inválido”.