ValueError: SavedModel的SignatureDefs中没有’serving_default’。可能的值是”

我有.data, .index和.meta文件,我能够从TensorFlow脚本中创建saved_model.pb和一个变量持有者。

当我运行以下命令时,

tflite_convert --output_file='/home/tensor/Work/cr/saved.tflite' --saved_model_dir='/home/tensor/Work/cr/model_out'

它给我报错

ValueError: No 'serving_default' in the SavedModel's SignatureDefs. Possible values are ''.

我想将这个.pb文件转换为.tflite。请问有人能告诉我如何解决这个错误吗?


回答:

你需要一个“推理图”来转换为TFLite。

为此,你需要导出一个所有变量都转换为常量的图(因为TFLite不会进行任何训练)。转换的说明在这里,具体是这段代码:

import os, argparseimport tensorflow as tf# The original freeze_graph function# from tensorflow.python.tools.freeze_graph import freeze_graph dir = os.path.dirname(os.path.realpath(__file__))def freeze_graph(model_dir, output_node_names):    """提取由输出节点定义的子图,并将其所有变量转换为常量     参数:        model_dir: 包含检查点状态文件的根文件夹        output_node_names: 一个字符串,包含所有输出节点的名称,以逗号分隔    """    if not tf.gfile.Exists(model_dir):        raise AssertionError(            "导出目录不存在。请指定一个导出目录:%s" % model_dir)    if not output_node_names:        print("你需要提供一个节点名称给--output_node_names。")        return -1    # 我们检索我们的检查点完整路径    checkpoint = tf.train.get_checkpoint_state(model_dir)    input_checkpoint = checkpoint.model_checkpoint_path    # 我们指定我们冻结图的文件完整名称    absolute_model_dir = "/".join(input_checkpoint.split('/')[:-1])    output_graph = absolute_model_dir + "/frozen_model.pb"    # 我们清除设备以允许TensorFlow控制它将在哪个设备上加载操作    clear_devices = True    # 我们使用一个临时的新图启动一个会话    with tf.Session(graph=tf.Graph()) as sess:        # 我们将元图导入当前默认图中        saver = tf.train.import_meta_graph(input_checkpoint + '.meta', clear_devices=clear_devices)        # 我们恢复权重        saver.restore(sess, input_checkpoint)        # 我们使用内置的TF助手将变量导出为常量        output_graph_def = tf.graph_util.convert_variables_to_constants(            sess, # 会话用于检索权重            tf.get_default_graph().as_graph_def(), # 图定义用于检索节点             output_node_names.split(",") # 输出节点名称用于选择有用的节点        )         # 最后我们序列化并将输出图转储到文件系统        with tf.gfile.GFile(output_graph, "wb") as f:            f.write(output_graph_def.SerializeToString())        print("%d ops in the final graph." % len(output_graph_def.node))    return output_graph_def

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注