我正在尝试将一个预训练模型的这三个文件转换为 Saved Model 格式:
- semantic_model.data-00000-of-00001
- semantic_model.index
- semantic_model.meta
以便稍后将其转换为 TFLite 格式以进行推理。在 StackOverflow 上搜索,我找到了以下代码,它可以正确生成 Saved_model.pb,但正如一些评论中提到的,这样做不会保留 Meta Graph Definitions,当我稍后尝试将其转换为 TFlite 格式或冻结时会导致错误。
import osimport tensorflow.compat.v1 as tftf.compat.v1.disable_eager_execution()export_dir = '/tf-end-to-end/export_dir' #trained_checkpoint_prefix = 'Models/semantic_model' \tf-end-to-end\Modelstrained_checkpoint_prefix = 'PATH TO MODEL DIRECTORY'tf.reset_default_graph()graph = tf.Graph()loader = tf.train.import_meta_graph(trained_checkpoint_prefix + ".meta" )sess = tf.Session()loader.restore(sess,trained_checkpoint_prefix)builder = tf.saved_model.builder.SavedModelBuilder(export_dir)builder.add_meta_graph_and_variables(sess, [tf.saved_model.tag_constants.TRAINING, tf.saved_model.tag_constants.SERVING], strip_default_attrs=True)builder.save()
当我尝试使用 saved_model 时,得到的错误是:
RuntTimeError: MetaGraphDef associated with tags {'serve'} could not be found in SavedModel
运行 showsavedmodelcli --all
时,在创建的 saved_model 下没有显示任何签名定义。
我的问题是,如何在转换为 saved_model 时保留数据,以便稍后转换为 TFLite 格式?
模型结构和创建详情可以在这里看到,包括提到的检查点文件: https://github.com/OMR-Research/tf-end-to-end
回答:
请参考这些步骤将检查点转换为 TFLite 模型: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/g3doc/r1/convert/python_api.md#convert-checkpoints-