es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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 reshape = tf.reshape(decodeImage,
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

Tags:  , ,

Answer

  1. Avatar for 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:

    DecodeJpeg.Options options = DecodeJpeg.channels(3L);
    DecodeJpeg decodeImage = tf.image.decodeJpeg(readFile.contents(), options);
    Tensor image = runner.fetch(decodeImage).run().get(0);
    
    // Convierte el tensor de imagen a float
    Tensor floatImage = tf.cast(image, TFloat32.DTYPE);
    
    Shape imageShape = floatImage.shape();
    // Reshape del tensor a 4D para la entrada al modelo
    Reshape<TFloat32> reshape = tf.reshape(floatImage,
       tf.array(1,
          imageShape.asArray()[0],
          imageShape.asArray()[1],
          imageShape.asArray()[2]
       )
    );
    
    Tensor reshapeTensor = s.runner().fetch(reshape).run().get(0);
    

    Al convertir el tensor de imagen a TFloat32, ahora puedes cargarlo en tu modelo entrenado sin obtener el error de “argumento inválido”.

Comments are closed.