如何将 TensorFlow 模型 2.0 转换为 2.0 API 的 tslite 模型?

How convert a TensorFlow model 2.0 to tslite model with 2.0 API?

如何将 TensorFlow 模型 2.0 转换为带有 2.0 的 tslite 模型API?

我试图将我的自定义 TensorFlow 模型导出为 tflite 格式,因为我想将此模块集成到 Android 应用程序中。编译 Python 脚本后出现奇怪的错误。

Used: Tensorflow 2.0.0 beta1 API https://www.tensorflow.org/lite/r2/convert

我尝试了这些方法来转换:

 - From SavedModelFrom 
 - tf.Keras Model

这些点将显示在下面的代码中。

CipherNeuralModel = keras.Sequential([
    keras.layers.Flatten(input_shape=[20, 20]),
    keras.layers.Dense(400, activation='relu'),
    keras.layers.Dense(26, activation='softmax')
])

CipherNeuralModel.compile(optimizer='adam',
                          loss='sparse_categorical_crossentropy',
                          metrics=['accuracy'])

CipherNeuralModel.fit(trainSumData, imgNumberFromLit, epochs=10, steps_per_epoch=20)

savePath = "D:\FolderToModel"
tf.saved_model.save(CipherNeuralModel, savePath)
export_model = tf.saved_model.load(savePath)
concrete_func = export_model.signatures[
    tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY
]
converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])
# Error here
converter = converter.convert()


# Example for convert tf.keras model to tflite
# convert_model = tf.function(lambda x: CipherNeuralModel(x))
# concrete_func = convert_model.get_concrete_function(
#     tf.TensorSpec(CipherNeuralModel.inputs[0].shape,
#                   CipherNeuralModel.inputs[0].dtype))
# convertor = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])
# tflite_model = convertor.convert()

TOCO failed. See console for info.\n%s\n%s\n" % (stdout, stderr)) tensorflow.lite.python.convert.ConverterError: TOCO failed. See console for info. b'"toco_from_protos" \xad\xa5 \xef\xa2\xab\xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2\xe0\xa5\xad\xad\xa5\xa9 \xa8\xab\xa8

当库的文件路径很长(超过 255 个字符)时,就会出现此问题。要解决这个问题需要注意以下几点:

  1. 将模型导出到文件:

    savePath = "D:\FolderToModel"
    tf.saved_model.save(CipherNeuralModel, savePath)
    
  2. 将模型下载到您的 google 驱动器

  3. 在https://colab.research.google.com

    创建项目
  4. 将您的 google 驱动器连接到项目:

    from google.colab import drive
    drive.mount('/content/drive')
    
  5. 导入tensorflow库到项目:

    pip install tensorflow==2.0.0-rc0
    
  6. 从 google 驱动器中的文件导入模型并将其转换为 tensorflow lite 模型:

    path = '/content/drive/My Drive/highModelNeural'
    export_model = tf.saved_model.load(path)
    concrete_func = export_model.signatures[
        tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY
    ]
    converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])
    converter = converter.convert()
    
  7. 将您的 tensorflow lite 模型导入文件,该文件将在 google 驱动器中创建:

    open("/content/drive/My Drive/highModelNeural/model70v5.tflite", "wb").write(converter)
    

之后,您可以在 android 应用程序或嵌入式设备中使用 TFlite 模型。