我是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。
答案 0 :(得分:0)
我遇到同样的问题。 我在tensorflow GitHub问题中找到了“如果是冻结图,则需要提供'input_arrays'和'output_arrays'”注释。
https://github.com/tensorflow/tensorflow/issues/38080
如果您不知道'input_arrays','ouput_arrays'和'input_shapes',则会在此链接中找到所有参数值。
答案 1 :(得分:0)
您使用的模型是冻结图,而不是保存的模型。
因此它需要为 TFLite 转换器使用特定的导入器:
converter = tf.compat.v1.lite.TFLiteConverter.from_frozen_graph(
model_file,
input_arrays=[input_name],
output_arrays=[output_name],
)