TFLiteConverter.from_saved_model RuntimeError:在SavedModel中找不到与标签{'serve'}关联的MetaGraphDef

时间:2019-11-22 21:48:27

标签: tensorflow tensorflow-lite

我是Tensorflow的新手,我正尝试将我训练的.pb模型从仅使用TensorFlow转换为TFLITE文件。

我正在关注提供的文档(参考:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/g3doc/r1/convert/python_api.md)。

我生成.pb文件的代码是

save_dir = "models/"
node_names = [node.name for node in tf.get_default_graph().as_graph_def().node]
output_graph_def = tf.graph_util.convert_variables_to_constants(
                               sess=sess,
                               input_graph_def =sess.graph.as_graph_def(),
                               output_node_names=node_names)

# write protobuf to disk
with tf.gfile.GFile('models/saved_model.pb', "wb") as f:
    f.write(output_graph_def.SerializeToString())

我尝试使用以下方式进行转换:

converter = tf.lite.TFLiteConverter.from_saved_model(save_dir)
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

我得到的错误是:

RuntimeError:在SavedModel中找不到与标签{'serve'}关联的MetaGraphDef。

2 个答案:

答案 0 :(得分:0)

我遇到同样的问题。 我在tensorflow GitHub问题中找到了“如果是冻结图,则需要提供'input_arrays'和'output_arrays'”注释。

https://github.com/tensorflow/tensorflow/issues/38080

如果您不知道'input_arrays','ouput_arrays'和'input_shapes',则会在此链接中找到所有参数值。

https://netron.app/

答案 1 :(得分:0)

您使用的模型是冻结图,而不是保存的模型。

因此它需要为 TFLite 转换器使用特定的导入器:

converter = tf.compat.v1.lite.TFLiteConverter.from_frozen_graph(
    model_file,
    input_arrays=[input_name], 
    output_arrays=[output_name],  
)