Ошибка: java .lang.IllegalArgumentException: Невозможно выполнить преобразование между тензором TensorFlowLite с типом STRING и объектом Java типа [F (который совместим с типом TensorFlowLite FLOAT32).
Я пытаюсь сделать вывод в Android из преобразованной модели tflite. Вот мой код:
void recognizeImage(Activity activity, float[] pixels) throws IOException {
MappedByteBuffer model = FileUtil.loadMappedFile(activity, "converted.tflite");
Interpreter interpreter = new Interpreter(model, new Interpreter.Options());
float[] output = new float[2];
interpreter.run(pixels, output);
}
Вот мой код, экспортирующий сохраненную модель:
serving_input_fn = tf.estimator.export.build_parsing_serving_input_receiver_fn(
tf.feature_column.make_parse_example_spec(
[tf.feature_column.numeric_column('pixels', shape=number_of_pixels)]))
classifier.export_saved_model(main_dir + 'saved_models/', serving_input_fn)
Вот мой код преобразования:
# TensorFlow version: tried with 2.2.0-dev20200128 and 2.2.0-dev20200308
saved_model_obj = tf.saved_model.load(export_dir=saved_model_dir)
concrete_func = saved_model_obj.signatures['serving_default']
converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.experimental_new_converter = True
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS,
tf.lite.OpsSet.SELECT_TF_OPS]
tflite_model = converter.convert()
open("converted.tflite", "wb").write(tflite_model)
Android build.gradle:
implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly'
implementation 'org.tensorflow:tensorflow-lite-gpu:0.0.0-nightly'
implementation 'org.tensorflow:tensorflow-lite-support:0.0.0-nightly'
implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.0.0-nightly'
Я видел подобные вопросы о тензорах типа float32 и UINT8 , но не о тензоре типа STRING. На самом деле, я думаю, что тензор моей модели должен быть float32, а не string.
Означает ли это, что преобразование в tflite неверно или неверный код Android?