将 tensorflow 模型转换为精简版时出现问题

Problem converting tensorflow model to lite version

我已经成功创建了一个 TensorFlow 模型,通过自定义操作保存为 SavedModel .pb 格式。

我的问题是我无法使用命令行实用程序或 python API

将其转换为精简版

我的pythonAPI是:

import tensorflow as tf 
import os
import custom_op

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

converter = tf.lite.TFLiteConverter.from_saved_model("./SavedModel")
converter.target_ops = [tf.lite.OpsSet.TFLITE_BUILTINS,
                        tf.lite.OpsSet.SELECT_TF_OPS] 

tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

但转换失败并出现错误:

ValueError: Provide an input shape for input array 'X'.

我假设是因为我的占位符没有形状类型。我不明白为什么正常的 TensorFlow 模型在没有它的情况下也能正常工作。

有什么帮助吗?

如 TensorFlow Lite documentation 中所述,您可以在 tf.lite.TFLiteConverter.from_saved_model 中传递不同的参数。

For more complex SavedModels, the optional parameters that can be passed into TFLiteConverter.from_saved_model() are input_arrays, input_shapes, output_arrays, tag_set and signature_key. Details of each parameter are available by running help(tf.lite.TFLiteConverter).

您可以按照 here 所述传递此信息。您需要为输入数组 'X' 提供输入形状。喜欢,

tf.lite.TFLiteConverter.from_saved_model("./Saved_model", input_shapes={("X" : [1,H,W,C])})