无法在 tensorflow lite 1.15 中运行 LSTM build.gradle模块:app

问题描述

TLDR:有人可以演示如何创建 LSTM,将其转换为 TFLite,并在 android 1.15 版中运行它吗?

我正在尝试创建一个简单的 LSTM 模型并使用 tensorflow v115 在 android 应用程序中运行。

** 使用 GRU 和 SimpleRNN 层时情况相同 **

创建简单的 LSTM 模型

我在 Python 中工作,尝试了两个 tensorflow 和 keras 版本:最新(2.4.1 内置 keras)和 1.1.5(我安装了 keras 2.2.4 版)。

我创建了这个简单的模型:

model = keras.Sequential()
model.add(layers.Embedding(input_dim=1000,output_dim=64))
model.add(layers.LSTM(128))
model.add(layers.Dense(10))
model.summary()

保存

我以“SavedModel”和“h5”格式保存:

model.save(f'output_models/simple_lstm_saved_model_format_{tf.__version__}',save_format='tf')
model.save(f'output_models/simple_lstm_{tf.__version__}.h5',save_format='h5')

转换为 TFLite

我尝试在 v115 和 v2 版本中创建并保存模型

然后,我尝试通过多种方法将其转换为 TFLite。

在 TF2 中:

  1. 我尝试从 keras 模型转换:
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
with open(f"output_models/simple_lstm_tf_v{tf.__version__}.tflite",'wb') as f:
    f.write(tflite_model)
  1. 我尝试从保存的模型转换:
converter_saved_model = tf.lite.TFLiteConverter.from_saved_model(saved_model_path)
tflite_model_from_saved_model = converter_saved_model.convert()
with open(f"{saved_model_path}_converted_tf_v{tf.__version__}.tflite",'wb') as f:
    f.write(tflite_model_from_saved_model)
  1. 我尝试从 keras 保存的模型 (h5) 进行转换 - 我尝试使用 两者 tf.compat.v1.lite.TFLiteConverter 和 tf..lite.TFLiteConverter。
converter_h5 = tf.compat.v1.lite.TFLiteConverter.from_keras_model_file(h5_model_path)
# converter_h5 = tf.lite.TFLiteConverter.from_keras_model_file(h5_model_path) # option 2
tflite_model_from_h5 = converter_h5.convert()
with open(f{h5_model_path.replace('.h5','')}_converted_tf_v1_lite_from_keras_model_file_v{tf.__version__}.tflite",'wb') as f:
f.write(tflite_model_from_h5)

安卓应用

build.gradle(模块:app)

当我想使用 v2 时,我使用:

    implementation 'org.tensorflow:tensorflow-lite-task-vision:0.0.0-nightly'
    implementation 'org.tensorflow:tensorflow-lite-task-text:0.0.0-nightly'

当我想使用 v115 时,我使用 implementation 'org.tensorflow:tensorflow-lite:1.15.0' 在建造等级。

然后,我遵循android中常见的tflite加载代码

private MappedByteBuffer loadModelFile(Activity activity) throws IOException {

        AssetFileDescriptor fileDescriptor = activity.getAssets().openFd(getModelPath());
        FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor());
        FileChannel fileChannel = inputStream.getChannel();
        long startOffset = fileDescriptor.getStartOffset();
        long declaredLength = fileDescriptor.getDeclaredLength();
        return fileChannel.map(FileChannel.MapMode.READ_ONLY,startOffset,declaredLength);
    }

    LoadLSTM(Activity activity) {
        try {
            tfliteModel = loadModelFile(activity);
        } catch (IOException e) {
            e.printstacktrace();
        }
        tflite = new Interpreter(tfliteModel,tfliteOptions);
        Log.d(TAG,"*** Loaded model *** " + getModelPath());
    }

当我使用 v2 时,模型已加载。 当我使用 v115 时,在我尝试过的所有选项中,我收到如下错误A/libc: Fatal signal 11 (SIGSEGV),code 1 (SEGV_MAPERR),fault addr 0x70 in tid 17686 (CameraBackgroun),pid 17643 (flitecamerademo)

我需要一个简单的结果 - 创建 LSTM 并使其在 android v115 中运行。

我错过了什么?谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)