我已经创建了一个简单的LSTM模型,我想在我的Android应用程序中使用它。我将其转换为TFLite模型,并将其保存在.tflite文件中。我根据本指南将模型导入到我的项目中,一切似乎都还好-- Android向我展示了当我想使用它时应该使用的示例代码,除非我尝试使用,否则在构建时会出现以下错误:
错误:包com.example.app.ml不存在导入com.example.app.ml.SnoreModel
我发现,当我使用不包含LSTM层的模型时,它工作得很好。我尝试了两种不同的方法将我的Keras模型转换为TFLite,一种来自保存的模型(如下面所示),另一种来自加载的模型。在这两种情况下,我必须设置supported_ops和_experimental_lower_tensor_list_ops = false,否则转换将失败。
TFLITE_SAVE_FILE = "SnoreModel.tflite"
converter = lite.TFLiteConverter.from_saved_model(filepath)
converter.target_spec.supported_ops = [lite.OpsSet.TFLITE_BUILTINS, lite.OpsSet.SELECT_TF_OPS]
converter._experimental_lower_tensor_list_ops = False
tflite_model = converter.convert()
with open(TFLITE_SAVE_FILE, 'wb') as tflite_model_file:
tflite_model_file.write(tflite_model)keras模型是这样保存的:
model.save(KERAS_SAVE_FILE)我正在使用最新版本的Android,并正在为27编译。在应用程序的build.gradle中,对于tflite,无论是否使用org.tensorflow:tensorflow-lite:2.7.0,错误都是相同的,其余部分是在我导入模型时由Android自动添加的:
implementation 'org.tensorflow:tensorflow-lite:2.7.0'
implementation 'org.tensorflow:tensorflow-lite-metadata:0.3.0'
implementation 'org.tensorflow:tensorflow-lite-task-vision:0.3.0'
implementation 'org.tensorflow:tensorflow-lite-task-text:0.3.0'
implementation 'org.tensorflow:tensorflow-lite-task-audio:0.3.0'
implementation 'org.tensorflow:tensorflow-lite-support:0.3.0'我想问的是:我转换模型的方式有什么问题吗?如果是的话,我将如何解决这个问题,因为我发现的大部分问题都很老,而且都链接到了Android版本。提前感谢
发布于 2022-02-28 15:53:43
错误消息没有显示任何关于失败原因的详细信息,甚至不显示它是否与TFLite相关。
缺少的一件事是,如果您使用SELECT_TF_OPS转换模型,并且模型有一些Select操作,那么您将需要添加依赖项,例如
implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.0.0-nightly-SNAPSHOT'请参阅更多信息,这里可以减少二进制大小。
https://stackoverflow.com/questions/71289145
复制相似问题