【问题标题】:How convert a TensorFlow model 2.0 to tslite model with 2.0 API?如何使用 2.0 API 将 TensorFlow 模型 2.0 转换为 tslite 模型?
【发布时间】:2019-08-23 12:15:14
【问题描述】:

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

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

使用: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 失败。有关信息,请参见控制台。\n%s\n%s\n" % (stdout, stderr)) tensorflow.lite.python.convert.ConverterError:TOCO 失败。看 控制台获取信息。 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

【问题讨论】:

  • 代码运行良好。你能提供完整的错误日志吗?另外,您使用的是 2.0 中的哪个版本的 TensorFlow?您可以安装最新版本(2.0.0b1)并检查。它应该可以正常工作。
  • 我使用的是最新版本。"TOCO 失败。有关信息,请参阅控制台。\n%s\n%s\n" % (stdout, stderr)) tensorflow.lite.python.convert.ConverterError : TOCO 失败。有关信息,请参见控制台。 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\xa2\xad\xa5\xe8\xad\xa5\xa9\r\n\xaa\xae\xac\xa0\xad\xa4\xae\xa9,\xa8\xe1\xaf\xae\xab\xad\xef \xa5\xac\xae\xa9 \xaf\xe0\xae\xa3\xe0\xa0\xac\xac\xae\xa9 \xa8\xab\xa8 \xaf\xa0\xaa\xa5\xe2\xad\xeb\xac \xe4\xa0\xa9\xab\xae\xac.\r\n'

标签: python tensorflow keras tensorflow2.0


【解决方案1】:

当库文件路径较长(超过 255 个字符)时,会出现此问题。为了解决这个问题需要提出以下几点:

  1. 将模型导出到文件:

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

  3. 在 https://colab.research.google.com 中创建一个项目

  4. 将您的谷歌驱动器连接到项目:

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

    pip install tensorflow==2.0.0-rc0
    
  6. 从 google drive 中的文件导入您的模型并将其转换为 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 drive 中创建:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 2020-04-27
    • 2020-08-25
    • 2019-05-06
    • 2020-08-25
    • 2020-11-02
    相关资源
    最近更新 更多